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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:10:20