TypeScript中如何获取对象类型的联合类型?
在TypeScript中获取对象值的联合类型
当然可以,你需要结合typeof和keyof来实现——单独的keyof确实不是你要的,它的作用是提取对象键的类型,而我们要的是值的类型联合。
先修正你示例里的代码问题:你写的const obj = { name: string; age: number; birthdate: DOB; }是错误语法,这应该是类型定义,或是带具体值的对象。下面分两种场景说明:
场景1:已有对象类型定义
如果已经提前定义了对象的类型:
// 先定义DOB类型 type DOB = { year: number; month: number; day: number }; // 定义对象类型 type Person = { name: string; age: number; birthdate: DOB; };
直接用Person[keyof Person]就能得到所有值的联合类型string | number | DOB,函数可以这么写:
const printObjectField = (something: Person[keyof Person]) => { // 函数逻辑 };
场景2:只有对象值,无预先定义类型
如果只有具体的对象值,没有提前写类型,就先用typeof获取这个值的类型,再结合keyof:
type DOB = { year: number; month: number; day: number }; const obj = { name: "张三", age: 28, birthdate: { year: 1995, month: 10, day: 15 } as DOB }; // 获取obj值的类型,再提取其所有值的联合类型 const printObjectField = (something: typeof obj[keyof typeof obj]) => { // 函数逻辑 };
原理很直接:keyof typeof obj会得到对象键的联合类型"name" | "age" | "birthdate",用这个键类型去索引typeof obj,就会得到每个键对应值的类型,自动合并成联合类型,完全不用手动声明。
内容的提问来源于stack exchange,提问作者johnbumble
相关产品推荐
相关产品推荐

