我有一个 Foo
类型,它是类型的联合
例如
type Foo = string | number
我想接收该类型并将其转换为类型数组的并集
type TransformedFoo = ToUnionOfArray<Foo> // => string[] | number[]
通常,您可以执行类似 Foo[]
的操作,但这不是我想要的,因为那会变成 (string | number)[]
。
我怎样才能拥有联合并将其转换为类型数组的联合?
答案 0 :(得分:2)
您可以使用distributive conditional types:
type Foo = string | number;
type Arrays<T> = T extends any ? T[] : never;
type TransformedFoo = Arrays<Foo>; // string[] | number[]
<块引用>
当条件类型作用于泛型类型时,如果给定联合类型,它们就会变成分布式
答案 1 :(得分:2)
在这种情况下,您可以使用分布条件:
type ToUnionOfArray<T> = T extends infer I ? I[] : never;
当 T 是条件语句中的裸类型参数时,条件应用于(或分布)输入联合 T 中的每个值。
有关其工作原理的更多信息:Typescript Distributive Conditional Types