132. 联合类型转换为元组类型
困难
实现一个高级工具类型 UnionToTuple<T>
,将联合类型转换为元组类型。
我们都知道联合类型是无序的,而元组类型是有序的,这意味着我们不用关注在联合类型的元素转换成元组后元素之间的顺序。简单来说就是输出的元组元素顺序可以是任意的。
你的类型应该能够正确地返回以下两种类型中的任意一种,但不能是它们的联合类型。
例如:
type Res1 = UnionToTuple<1> // expected to be [1]
type Res2 = UnionToTuple<'any' | 'a'> // expected to be ['any', 'a'] or ['a','any']
联合类型可能会发生合并,即某些类型可能会合并(或被合并)其他类型,而且我们无法防止这种合并。请看以下示例:
Equal<UnionToTuple<any | 'a'>, UnionToTuple<any>> // true
Equal<UnionToTuple<unknown | 'a'>, UnionToTuple<unknown>> // true
Equal<UnionToTuple<never | 'a'>, UnionToTuple<'a'>> // true
Equal<UnionToTuple<'a' | 'a' | 'a'>, UnionToTuple<'a'>> // true