获取数组或元组第一个元素First<T>
提取元组第一个元素类型
用例
type arr1 = ["a","1","3"];
type FirstEl = First<arr1>
//预期:"a", 空数组就是:never
实现
type First<T extends any[]> = T extends [infer F,...any[]] ? F : never;
知识点
1 泛型约束
T extends any[]: 泛型 T 必须是数组或元组类型. 效果是:
- 限制传入 First 的类型只能是数组,防止传入 number、string 等非数组类型导致类型报错
2 条件类型
T extends [infer F, ...any[]] ? F : never
- A extends B ? C : D,判断类型 A 是否满足 B 的结构,是则返回 C,否则返回 D
- 这里用 T extends [ ... ] 来检查 T 是否能匹配至少有一个元素的数组或元组结构
3 infer
infer F
infer: 用于在条件类型中声明一个待推断的类型变量
- 这里 infer F 表示:如果 T 能匹配上 [第一个元素, 剩余元素] 的结构,就把第一个元素的类型 提取 出来,赋值给 F 并返回
4 剩余元素
...any[]
- 在元组或数组类型中使用 ...any[],表示剩余的所有元素,无论有多少个、无论是什么类型。
- [infer F, ...any[]] 匹配的是:
- 第一个元素(用 F 捕获其类型)
- 后面跟着任意数量(包括 0 个)的任意类型元素
never
: never
- never 表示“永远不会有值”的类型。
- 当 T 不满足 [infer F, ...any[]] 时(即 T 是空元组 []),返回 never

浙公网安备 33010602011771号