Skip to main content

元组转换为联合类型

题目

实现泛型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
最后,利用keyofobject操作,获取object key组成的联合类型。