基于类型数组创建联合类型

Create union type based on array of types

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

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

并且会像

一样使用
Union<[string, number]> // would create (string | number)

我知道我可以立即在上面定义联合,但我需要它在泛型中使用它最终会像 Union<[TDynamic, UDynamic]>

您可以使用以下类型:

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];