根据类型数组创建联合类型

时间:2019-10-06 08:49:17

标签: typescript generics union typescript-generics

是否可以这样定义联合类型:

Union<T extends any[]> = // something...

,其用法类似于

Union<[string, number]> // would create (string | number)

我知道我可以立即在上面定义并集,但是我需要它在泛型中使用,最终它会类似于Union<[TDynamic, UDynamic]>

1 个答案:

答案 0 :(得分:1)

您可以使用以下类型:

type Union<T extends any[]> = T extends (infer U)[] ? U : never;

这实际上与docs中定义的Unpacked的类型相同,并且可以工作,因为在这种情况下,类型元组成为类型联合。

type X1 = Union<[number, string]>; // string | number
type X2 = Union<[number, number]>; // number
type X3 = Union<[number]>; // number

如果您使用的是不支持infer的较旧的TypeScript版本,则还可以使用:

type Union<T extends any[]> = T[number];