ts中实现shift/unshift/pop/push

255 阅读1分钟

前言

我们知道js中,可以对数组的首尾,进行增加/减少元素的操作。

ts的type中同理,可以进行这种操作。

unshift/push

首先看unshift和push这两种。

把这两种放在一起,是因为他们都是增加,方法类似。

type Unshift<T extends any[], U> = [U,...T]
type Push<T extends any[], U> = [...T,U]

shift/pop

这两种都是减少。

infer出需要减少的项,结合extends进行never即可。

I是保留的数组,R是减少的那一项。

type Shift<T extends any[]> = T extends [infer R, ...infer I] ? I : never
type Pop<T extends any[]> = T extends [...infer I, infer R] ? I : never