我想获取一个联合类型的所有可用键。
interface Foo {
foo: string;
}
interface Bar {
bar: string;
}
type Batz = Foo | Bar;
type AvailableKeys = keyof Batz;
Run Code Online (Sandbox Code Playgroud)
我想得到的'foo' | 'bar'结果AvailableKeys是never(作为替代方案,我可以做的是keyof (Foo & Bar),产生确切所需类型的结果,但我想避免重复这些类型)。
我已经发现问题keyofunion类型应该在github上产生键的union。我知道答案,那keyof UnionType不应该产生所有可能的密钥。
所以我的问题是:是否有另一种方法来获取所有可能的键的列表(如果需要tsc的版本2.8是可以的)?
这可以在打字稿2.8和更高版本中使用条件类型完成。条件类型遍历联合中的类型,对结果进行联合:
type Batz = Foo | Bar;
type KeysOfUnion<T> = T extends any ? keyof T: never;
// AvailableKeys will basically be keyof Foo | keyof Bar
// so it will be "foo" | "bar"
type AvailableKeys = KeysOfUnion<Batz>;
Run Code Online (Sandbox Code Playgroud)
简单方法keyof Union不起作用的原因是keyof,在联合将仅是公共密钥的情况下,总是返回类型的可访问密钥。条件类型in KeysOfUnion实际上将采用联合的每个成员并获取其键,因此结果将是keyof应用于联合中每个成员的联合。
| 归档时间: |
|
| 查看次数: |
1208 次 |
| 最近记录: |