如何从TypeScript联合类型创建非混合数组类型?
实现TypeScript联合类型转非混合数组工具类型
要实现将联合类型转换为各成员单独的数组类型联合(而非混合数组),可以利用TypeScript的分布式条件类型特性,它会自动对联合类型的每个成员单独处理:
type ToArray<T> = T extends unknown ? T[] : never;
原理说明
当传入的T是联合类型时,条件类型会遍历联合中的每一个成员,分别执行T[]转换,最终将所有结果重新合并为新的联合类型。比如对于string | number:
- 先处理
string:string extends unknown ? string[] : never→string[] - 再处理
number:number extends unknown ? number[] : never→number[] - 最终得到
string[] | number[]
示例验证
type MyType = string | number; type ArrayOfMyType = ToArray<MyType>; // 类型为 string[] | number[],而非 (string | number)[]
如果直接写type ToArray<T> = T[],得到的会是混合数组类型(string | number)[],这显然不符合需求。
内容的提问来源于stack exchange,提问作者Pizzicato
相关产品推荐
相关产品推荐

