以下我们主要使用四个例子来实现类型的提取
提取头部元素
// 取第一个元素
type Arr = ['a', 'b', 'c']
type First<T extends any[]> = T extends [infer one, ...any[]] ? one : []
type a = First<Arr>
提取最后一个元素
// 取最后一个元素
type Arr = ['a', 'b', 'c']
type Last<T extends any[]> = T extends [...any[],infer last] ? last : []
type a = Last<Arr>
删除最后一个元素
// 剔除尾部的元素
type Arr = ['a', 'b', 'c']
type pop<T extends any[]> = T extends [...infer Rest, unknown] ? Rest : []
type a = pop<Arr>
删除第一个元素
// 剔除头部的元素
type Arr = ['a', 'b', 'c']
type shift<T extends any[]> = T extends [unknown, ...infer Rest] ? Rest : []
type a = shift<Arr>