从索引对象值获取联合类型

时间:2018-04-26 13:17:42

标签: typescript

假设我有一个索引类型:

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

是否可以从中获取(派生):

type V = 'A' | 'B'

不使用如下的显式方法:

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

我想要的是像keyof(用于获取密钥联合类型),但是用于值。

2 个答案:

答案 0 :(得分:9)

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

type V = X[keyof X]

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

答案 1 :(得分:0)

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

const X = {
 a: 'A',
 b: 'B'
} as const

type XValues = typeof X[keyof typeof X]

// "A" | "B