假设我有一个索引类型:
type X = {
a: 'A',
b: 'B'
}
是否可以从中获取(派生):
type V = 'A' | 'B'
不使用如下的显式方法:
type V = X['a'] | X['b']
我想要的是像keyof
(用于获取密钥联合类型),但是用于值。
答案 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