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
相关产品推荐
相关产品推荐

