You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:09:03