搞定TS,就靠这个系列(七)

251 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

序言:

这是搞定 TS 第三篇,如果没有基础的小伙伴想要从零搞定 TS ,请从第一篇开始juejin.cn/post/701033…

第一题

实现一个 Unshift 工具类型,用于把指定类型 E 作为第一个元素添加到 T 数组类型中。具体的使用示例如下所示:

type Unshift<T extends any[], E> =  // 你的实现代码// 测试用例
type Arr0 = Unshift<[], 1>; // [1]
type Arr1 = Unshift<[1, 2, 3], 0>; // [0, 1, 2, 3]

该题考察内容

对数组的理解,infer的使用 和扩展运算符的使用

题解

  1. 将传入的参数放在数组的第一项,原有的数组使用扩展运算符打开,组合成新的数组
type Unshift<T extends any[], E> =  [E,...T]
​
// 测试用例
type Arr0 = Unshift<[], 1>; // [1]
type Arr1 = Unshift<[1, 2, 3], 0>; // [0, 1, 2, 3]

第二题

实现一个 Push 工具类型,用于把指定类型 E 作为第最后一个元素添加到 T 数组类型中。具体的使用示例如下所示:

type Push<T extends any[], V> = // 你的实现代码// 测试用例
type Arr0 = Push<[], 1> // [1]
type Arr1 = Push<[1, 2, 3], 4> // [1, 2, 3, 4]

该题考察内容

对数组的理解,infer的使用 和扩展运算符的使用 ​

题解

  1. 将传入的参数放在数组的第一项,原有的数组使用扩展运算符打开,组合成新的数组
type Push<T extends any[], V> = [...T,V]
​
// 测试用例
type Arr0 = Push<[], 1> // [1]
type Arr1 = Push<[1, 2, 3], 4> // [1, 2, 3, 4]

第三题

实现一个 Shift 工具类型,用于移除 T 数组类型中的第一个类型。具体的使用示例如下所示:

type Shift<T extends any[]> = // 你的实现代码// 测试用例
type S0 = Shift<[1, 2, 3]> 
type S1 = Shift<[string,number,boolean]> 

该题考察内容

对数组的理解,infer的使用 和扩展运算符的使用 ​

题解

利用 infer 占位,取出除第一项的其他所有项

type Shift<T extends any[]> = T extends [first:infer A, ...rest :infer B] ? B : never
​
// 测试用例
type S0 = Shift<[1, 2, 3]> 
type S1 = Shift<[string,number,boolean]>