【问题标题】:Is it possible to create a discriminated union using mapped types in TypeScript?是否可以在 TypeScript 中使用映射类型创建可区分联合?
【发布时间】:2021-07-10 10:07:54
【问题描述】:

假设我有如下接口X:

type X = {
  red: number, 
  blue: string
}

是否可以使用映射类型构造联合类型Y?如果不是,是否可以用其他类型的类型级机制来构建?

type Y = {
  kind: "red"
  payload: number
} | {
 kind: "blue"
 payload: string
}

【问题讨论】:

    标签: typescript


    【解决方案1】:

    是的,您可以利用T[keyof T]T 的值的联合这一事实,无论T 是什么。您可以使用映射类型来构造一个类型,其值是您想要的联合的分支:

    type Y = { [K in keyof X]: {kind: K, payload: X[K]} }[keyof X]
    

    Playground Link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 2019-02-27
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      • 1970-01-01
      • 2019-12-10
      相关资源
      最近更新 更多