如何将联合类型转换为打字稿中的数组联合?

时间:2021-03-30 14:15:37

标签: typescript

我有一个 Foo 类型,它是类型的联合

例如

type Foo = string | number

我想接收该类型并将其转换为类型数组的并集

type TransformedFoo = ToUnionOfArray<Foo> // => string[] | number[]

通常,您可以执行类似 Foo[] 的操作,但这不是我想要的,因为那会变成 (string | number)[]

我怎样才能拥有联合并将其转换为类型数组的联合?

2 个答案:

答案 0 :(得分:2)

您可以使用distributive conditional types

type Foo = string | number;

type Arrays<T> = T extends any ? T[] : never;

type TransformedFoo = Arrays<Foo>; // string[] | number[]

Playground

<块引用>

当条件类型作用于泛型类型时,如果给定联合类型,它们就会变成分布式

答案 1 :(得分:2)

在这种情况下,您可以使用分布条件:

type ToUnionOfArray<T> = T extends infer I ? I[] : never;

当 T 是条件语句中的裸类型参数时,条件应用于(或分布)输入联合 T 中的每个值。

有关其工作原理的更多信息:Typescript Distributive Conditional Types