基于类型数组创建联合类型
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];
是否可以这样定义联合类型:
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];