如何从TypeScript接口中提取数组类型对应的属性键联合类型
你可以通过 TypeScript 的条件类型和映射类型组合实现这个需求,通用实现如下:
第一步:定义提取数组属性键的工具类型
type ExtractArrayKeys<T> = { [K in keyof T]: T[K] extends Array<any> ? K : never }[keyof T]
第二步:传入目标接口使用
// 前置定义 interface SomeInterface {} interface SomeOtherInterface {} interface Obj { string1: string string2: string array1: SomeInterface[] array2: SomeOtherInterface[] } // 最终得到的类型就是 "array1" | "array2" type TargetUnion = ExtractArrayKeys<Obj>
逻辑说明
- 先遍历泛型
T的所有属性键,对每个属性做类型判断:如果属性值是数组类型,就把该属性的值设为键名本身,否则设为never - 再通过
[keyof T]取出所有属性的值组成联合类型,never类型会在联合类型中自动被剔除,最终剩下的就是所有值为数组的属性键组成的联合类型。
内容的提问来源于stack exchange,提问作者André Krosby
相关产品推荐
相关产品推荐

