TypeScript如何获取不同对象组成的数组类型的所有键名
解决方案
keyof 作用于联合类型时,默认只会返回所有联合成员共有的键,要获取所有键的并集,需要借助分布式条件类型遍历联合的每个成员单独取键再合并。
首先定义通用工具类型:
// 分布式条件类型实现:遍历联合类型每个成员,分别取key后合并为联合 type AllKeys<T> = T extends unknown ? keyof T : never;
在你的示例中使用效果如下:
type FooBar = [ { foo: "hello"; bar: "goodbye"; }, { foo: "hi"; bar: "goodbye"; fizz: "buzz"; } ]; type FooBarAllKeys = AllKeys<FooBar[number]>; // 此时 FooBarAllKeys 的类型为 "foo" | "bar" | "fizz"
实现原理
- 当泛型
T为联合类型时,条件类型T extends unknown ? keyof T : never会自动触发分布式计算逻辑:将联合的每个成员单独代入执行keyof T,最后把所有结果合并为新的联合类型,刚好符合收集所有对象全部键的需求。
内容的提问来源于stack exchange,提问作者Richard Fernandez
相关产品推荐
相关产品推荐

