是否可以这样定义联合类型:
Union<T extends any[]> = // something...
,其用法类似于
Union<[string, number]> // would create (string | number)
我知道我可以立即在上面定义并集,但是我需要它在泛型中使用,最终它会类似于Union<[TDynamic, UDynamic]>
答案 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];