infer 类型提取
提取头部元素
type Arr = ['a','b','c']
type First<T extends any[]> = T extends [infer First,...any[]] ? First : []
type a = First<Arr>
类型参数 T 通过extends 约束 只能是数组类型,然后通过infer 声明局部 First 变量做提取,后面的元素可以是任意类型,然后把局部变量返回
提取尾部元素
type Arr = ['a', 'b', 'c']
type Last<T extends any[]> = T extends [...any[], infer Last,] ? Last : []
type c = Last<Arr>
剔除第一个元素 Shift
type Arr = ['a','b','c']
type First<T extends any[]> = T extends [unknown,...infer Rest] ? Rest : []
type a = First<Arr>
思路就是 我们除了第一个的元素把其他的剩余元素声明成一个变量 直接返回 就实现了我们的要求 剔除第一个元素
剔除尾部元素 pop
type Arr = ['a','b','c']
type First<T extends any[]> = T extends [...infer Rest,unknown] ? Rest : []
type a = First<Arr>