获取数组或元组第一个元素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
posted @ 2026-07-09 08:48  一个行走者  阅读(13)  评论(0)    收藏  举报