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

如何在TypeScript中获取接口成员类型的联合类型?

获取TypeScript接口/对象成员类型的联合类型

你说的这个需求完全可以通过TypeScript的索引访问类型来实现,结合你已经熟悉的keyof操作符就能轻松搞定!

核心思路

我们已经知道keyof T能拿到接口T所有键的联合类型,在此基础上,用T[keyof T]就能直接取出这些键对应的所有值类型的联合啦。

针对你的示例实现

就拿你给出的Foo接口来说:

interface Foo { 
  name: string; 
  age: number; 
}

// 定义成员类型的联合类型
type FooValueTypes = Foo[keyof Foo]; 
// 此时 FooValueTypes 等价于 string | number

你可以写个函数验证这个类型是否生效:

function takeFooValue(value: FooValueTypes) {
  // 这里的value只能是string或number类型
  console.log(value);
}

takeFooValue("Alice"); // ✅ 合法
takeFooValue(30);      // ✅ 合法
takeFooValue(true);    // ❌ 报错,boolean不在FooValueTypes范围内

扩展:针对对象字面量的情况

如果你的类型来源是一个对象字面量,而非预先定义的接口,也可以用同样的思路,搭配typeof操作符:

const user = {
  name: "Bob",
  age: 25,
  isAdmin: false
};

type UserValueTypes = typeof user[keyof typeof user];
// UserValueTypes 等价于 string | number | boolean

小补充

这种索引访问的方式还能和其他类型操作灵活组合,比如如果只想筛选出某一类成员类型,还可以搭配条件类型进一步处理,但针对你当前的需求,T[keyof T]就完全够用啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:27:33