Skip to content

Latest commit

 

History

History
63 lines (42 loc) · 2.39 KB

1.14.unshift.md

File metadata and controls

63 lines (42 loc) · 2.39 KB
title date hideComments
第十四题:unshift
2020/05/29
false

题目

实现类型版本的 Array.unshift

例如:

type Result = Unshift<[1, 2], 0>; // [0, 1, 2,]

点击github查看:

挑战

::: 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”函数!

参考