Tuple to Union
挑战
实现泛型TupleToUnion<T>
,它返回由元组所有值组成的联合类型。
例如:
type Arr = ["1", "2", "3"];
const a: TupleToUnion<Arr>; // expected to be '1' | '2' | '3'
解答
我们需要获取一个数组中的所有元素并将其转化为联合类型。幸运的是,TypeScript 已经
在其类型系统中实现了这种功能——
lookup types。
我们可以使用构造T[number]
得到由T
的所有元素所组成的联合类型。
type TupleToUnion<T> = T[number];
但是,我们得到了一个 error
: Type ‘number’ cannot be used to index type ‘T’
。
这时因为我们没有向T
施加约束,即没有告知编译器T
是一个可以被索引的数组。
让我们通过添加extends unknown[]
解决这个问题。
type TupleToUnion<T extends unknown[]> = T[number];
评论