【发布时间】:2018-10-07 05:08:45
【问题描述】:
假设我有一个索引类型:
type X = {
a: 'A',
b: 'B'
}
是否有可能从中得到(派生):
type V = 'A' | 'B'
不使用显式方法,例如:
type V = X['a'] | X['b']
我想要的是 keyof 之类的东西(用于获取键联合类型),但用于值。
【问题讨论】:
标签: typescript
假设我有一个索引类型:
type X = {
a: 'A',
b: 'B'
}
是否有可能从中得到(派生):
type V = 'A' | 'B'
不使用显式方法,例如:
type V = X['a'] | X['b']
我想要的是 keyof 之类的东西(用于获取键联合类型),但用于值。
【问题讨论】:
标签: typescript
您可以使用带有keyof结果的类型查询:
type V = X[keyof X]
通常类型查询将返回所有可能字段类型的联合,因此X['a'] | X['b'] 与X['a' | 'b'] 相同。这就是X[keyof X] 起作用的原因,因为keyof 将返回代表对象中所有键的字符串文字类型的联合。
【讨论】:
我意识到这已经得到了回答,但是如果您来自 google,并且您正在寻找一种将对象值转换为联合的方法(正如问题的标题所暗示的那样),您可以这样做:
const X = {
a: 'A',
b: 'B'
} as const
type XValues = typeof X[keyof typeof X]
// "A" | "B
【讨论】: