繁体   English   中英

如何将 map 键名转为 typescript object 的值类型

[英]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']

而不是明确地重新定义类型MSHEVNPID

对我来说最好的解决方案是定义一个按键/类型对类型进行分组的接口,然后定义一个通用的来选择每个键。 它看起来像 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM