infer 关键字

其实就是一个占位符,可以利用它来实现提取数组元素和递归
比如我想把下面的 type 递归

1
type Arr = ["a", "b", "c"]

首先需要利用 infer 取到数组中的元素,这里假设我们要取字符串 “a”

1
2
3
4
// 如果泛型是数组类型,那么就使用 infer 取第一个
type First<T extends any[]> = T extends [infer First, ...any[]] ? First : []
// 此时这里的 test1 鼠标移上去类型推断为 “a” 字符串
type test1 = First<Arr>

以上步骤我们就可以成功取到数组元素,后面只需重新递归拼接即可

1
2
3
type Rever<T extends any[]> = T extends [infer First, ...infer rest] ? [...Rever<rest>, First] : T
// 此时这里的 test2 鼠标移上去类型推断为 [“c”, 'b', 'a'] 数组
type test2 = Rever<Arr>

就是这么简单。🤗