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

TypeScript中如何通过对象索引获取键名组成的联合类型?

你可以通过 TypeScript 内置的 keyof 运算符配合 typeof 实现需求,直接提取对象键名组成的联合类型,正确实现代码如下:

const fruits = {
  apple: { shape: 'round', color: 'red' },
  pear: { shape: 'pear-like', color: 'yellow' },
  banana: { shape: 'banana-shaped', color: 'banana-colored' }
} as const;

type FruitType = keyof typeof fruits; // 类型推导结果为:"apple" | "pear" | "banana"

实现逻辑说明

  • 先用 typeof fruits 拿到常量对象 fruits 对应的 TypeScript 类型定义
  • 再用 keyof 运算符提取该类型的所有键名,自动组装为字符串字面量联合类型

补充说明

  • 如果没有添加 as const,只要你没有给对象显式声明更宽泛的类型(比如 Record<string, object>),keyof typeof fruits 依然可以得到正确的键联合类型。加as const的作用是进一步锁定对象内部属性值的类型,避免被自动拓宽为通用的string类型。
  • 如果你操作的是已经定义好的接口/类型别名,直接对类型使用keyof即可,不需要搭配typeof:
interface Fruits {
  apple: { shape: string; color: string };
  pear: { shape: string; color: string };
  banana: { shape: string; color: string };
}
type FruitType = keyof Fruits; // 同样得到 "apple" | "pear" | "banana"

内容的提问来源于stack exchange,提问作者Pete

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:15:03