如何在TypeScript中提取接口的属性值类型(去除键名)
解决方案
直接获取目标类型(最简便方式)
如果已经明确要取的键名,无需先使用Pick,直接通过索引访问类型就能拿到对应的值类型:
interface A { person: { name: string; age: number; }, count: number } // 直接得到你想要的类型C type C = A['person'];
实现通用的StripKeyOut工具类型
如果你确实需要基于Pick后的单键对象类型提取值类型,可以定义如下工具类型:
// 提取单键对象类型的值类型 type StripKeyOut<T> = T[keyof T];
结合你的示例使用:
interface A { person: { name: string; age: number; }, count: number } type B = Pick<A, 'person'>; type C = StripKeyOut<B>; // 类型为 {name: string; age: number;}
原理说明
keyof T会获取对象类型T的所有键名,由于B是通过Pick选中单个键得到的类型,keyof B就是唯一的键'person'。T[keyof T]通过索引访问,直接拿到该键对应的属性值类型。
注意:如果传入的
T包含多个键,StripKeyOut<T>会返回所有值类型的联合类型,你的场景中因为是Pick单键,所以不会有这个问题。
内容的提问来源于stack exchange,提问作者jwkoo
相关产品推荐
相关产品推荐

