【问题标题】:Get union type from indexed object values从索引对象值中获取联合类型
【发布时间】:2018-10-07 05:08:45
【问题描述】:

假设我有一个索引类型:

type X = {
 a: 'A',
 b: 'B'
}

是否有可能从中得到(派生):

type V = 'A' | 'B'

不使用显式方法,例如:

type V = X['a'] | X['b']

我想要的是 keyof 之类的东西(用于获取键联合类型),但用于值。

【问题讨论】:

    标签: typescript


    【解决方案1】:

    您可以使用带有keyof结果的类型查询:

    type V = X[keyof X]
    

    通常类型查询将返回所有可能字段类型的联合,因此X['a'] | X['b']X['a' | 'b'] 相同。这就是X[keyof X] 起作用的原因,因为keyof 将返回代表对象中所有键的字符串文字类型的联合。

    【讨论】:

      【解决方案2】:

      我意识到这已经得到了回答,但是如果您来自 google,并且您正在寻找一种将对象值转换为联合的方法(正如问题的标题所暗示的那样),您可以这样做:

      const X = {
       a: 'A',
       b: 'B'
      } as const
      
      type XValues = typeof X[keyof typeof X]
      
      // "A" | "B
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-04
        • 1970-01-01
        • 1970-01-01
        • 2015-08-27
        • 2021-12-10
        • 2019-10-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多