如何从TypeScript联合类型中动态提取仅数组类型
提取联合类型中的数组类型(TypeScript)
当然可以实现这个需求!我们可以利用TypeScript的分布式条件类型来轻松从任意联合类型中筛选出所有数组类型的成员。
这里直接给你一个通用的类型工具:
type ExtractArray<T> = T extends any[] ? T : never;
原理说明
TypeScript的条件类型在处理联合类型时会自动「分布式」作用于每个成员:
- 对于联合类型中的每一个成员
T,如果它是数组类型(符合extends any[]的条件),就保留这个类型; - 如果不是数组类型,就返回
never,而never在联合类型中会被自动忽略,最终剩下的就是所有数组类型的联合。
示例验证
我们用你给出的两个场景来测试:
场景1
type a = string[] | number[] | boolean; type b = ExtractArray<a>; // 结果:string[] | number[]
场景2
type c = boolean[] | number[] | string; type d = ExtractArray<c>; // 结果:boolean[] | number[]
扩展适配
这个方案完全支持动态适配不同结构的联合类型,哪怕你的联合类型里混合了更多复杂类型,比如:
type MixedUnion = Date[] | RegExp | number[] | { id: string }; type ExtractedArrays = ExtractArray<MixedUnion>; // 结果:Date[] | number[]
内容的提问来源于stack exchange,提问作者Vlad
相关产品推荐
相关产品推荐

