如何从TypeScript索引类型推导值联合类型?
获取对象类型的值联合类型(类似
keyof的反向操作) 当然可以实现!TypeScript 提供了非常简洁的方式,像你用keyof获取键联合类型那样,一键拿到对象类型的所有值的联合类型,完全不用手动枚举每个属性的取值。
核心解决方案
直接使用 X[keyof X] 就能得到你想要的 V 类型:
type X = { a: 'A', b: 'B' }; // 自动推导所有值的联合类型 type V = X[keyof X]; // 最终类型为 'A' | 'B'
原理拆解
这里分两步理解:
keyof X会生成X的所有键名的联合类型,也就是'a' | 'b';- 用这个键名联合类型去索引
X类型,TypeScript 会自动把每个键对应的取值类型合并成一个联合类型,也就是'A' | 'B'。
扩展场景:更复杂的对象类型
这种方式同样适用于属性类型多样的对象,比如:
type Product = { id: number; name: string; inStock: boolean; }; // 自动得到所有属性值的类型联合 type ProductValueTypes = Product[keyof Product]; // number | string | boolean
这种写法的优势在于可维护性:如果后续修改了 X 里的属性值,V 会自动同步更新,不用手动修改联合类型的定义,完全做到了“一处修改,处处生效”。
内容的提问来源于stack exchange,提问作者WHITECOLOR
相关产品推荐
相关产品推荐

