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

