元组转换为联合类型
题目
实现泛型TupleToUnion<T>
,它返回元组所有值的合集。
例如
type Arr = ['1', '2', '3']
type Test = TupleToUnion<Arr> // expected to be '1' | '2' | '3'
题目来源:https://tsch.js.org/10/zh-CN
解答
解法一
type TupleToUnion<T extends any[]> = T[number]
使用extends any[]
限制泛型的类型只能是数组。
利用T[number]
的特性,取出的类型即为联合类型。
解法二
type TupleToUnion<T extends any[]> = keyof {
[P in T[number]] : T[P]
}
与解法一的差别,在于:先用in
对元组进行遍历,转换成object
。
最后,利用keyof
对object
操作,获取object key
组成的联合类型。