title | date | hideComments |
---|---|---|
第十四题:unshift |
2020/05/29 |
false |
实现类型版本的 Array.unshift
。
例如:
type Result = Unshift<[1, 2], 0>; // [0, 1, 2,]
::: info 提示 在这个挑战中,你需要修改下方的代码使得测试通过(使其没有类型错误)。并且记得将答案分享奥。 :::
这个挑战和 Push challenge
有很多相似之处。在这里,我们使用可变元 组类型(Variadic Tuple Types)
来获取数组中的所有元素。
这里我们做的差不多,但顺序不同。首先,让我们从传入的数组中获取所有元素:
type Unshift<T, U> = [...T];
在这段代码中,我们得到了编译错误“A rest element type must be an array type”
。让 我们通过在类型参数上添加一个约束来修正这个错误:
type Unshift<T extends unknown[], U> = [...T];
现在,我们有了与传入的数组相同的数组。我们只需要在元组的开头添加一个元素。让我们 这样做:
type Unshift<T extends unknown[], U> = [U, ...T];
这样,我们在类型系统中创建了一个“unshift”
函数!