[英]How to map key name to value type of typescript object
我有以下内容:
type MSH = {
val1: string
}
type EVN = {
val2: string
}
type PID = {
val3: string
}
type Segment = MSH | EVN | PID
type Segments = {
MSH: MSH
EVN: EVN
PID: PID
}
有没有一种方法可以避免在Segments
中重复键类型映射?
谢谢 !
您可以执行以下操作
type Segments = {
MSH: {val1:string}
EVN: {val2:string}
PID: {val3: string}
}
type Segment = Segments[keyof Segments]
然后当你想单独使用 MSH、ENV 或 PID 的类型时,你可以使用
Segments['MSH']
Segments['EVN']
Segments['PID']
而不是明确地重新定义类型MSH
、 EVN
和PID
。
对我来说最好的解决方案是定义一个按键/类型对类型进行分组的接口,然后定义一个通用的来选择每个键。 它看起来像 Typescript 选择。
interface Segments {
MSH: MSH,
ENV: EVN,
PID: PID,
}
type Message<K extends keyof Segments> = {
[P in K]: Segments[P]
}
type ADT = Message<'MSH' | 'PID'>
const message: ADT
message.MSH //OK
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.