You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据元组首元素从联合类型中筛选元组并获取Tail类型?

根据元组首元素筛选并获取Tail类型的实现方案

可以实现这个需求,利用TypeScript条件类型的分布式特性,我们可以先筛选出首元素匹配的元组,再获取它们的Tail类型。以下是具体实现:

核心实现

首先保留你提供的Tail工具类型,然后实现核心的筛选+取Tail的工具类型:

// 原Tail工具类型
type Tail<T extends readonly unknown[]> = T extends readonly [
  unknown,
  ...infer TailType
]
  ? TailType
  : never;

// 直接实现:筛选首元素为H的元组并返回其Tail类型
type TailByHead<T extends readonly unknown[], H> = T extends readonly [H, ...infer _] 
  ? Tail<T> 
  : never;

如果你希望逻辑更清晰,也可以拆分为筛选元组和取Tail两个独立步骤:

// 步骤1:筛选出首元素为指定类型的元组
type FilterByHead<T extends readonly unknown[], H> = T extends readonly [H, ...infer _] 
  ? T 
  : never;

// 步骤2:对筛选后的元组集合取Tail类型
type TailByHead<T extends readonly unknown[], H> = Tail<FilterByHead<T, H>>;

验证示例

用你给出的元组联合类型测试:

type T1 = [1,'a', boolean];
type T2 = [1,'b','c'];
type T3 = ['c','a'];
type T4=[3]
type T5=[3,'a']

type U = [T1,T2,T3,T4,T5][number]

// 首元素为1时的结果:["a", boolean] | ["b", "c"]
type Result1 = TailByHead<U, 1>;

// 首元素为"c"时的结果:['a']
type Result2 = TailByHead<U, 'c'>;

// 首元素为3时的结果:[] | ["a"]
type Result3 = TailByHead<U, 3>;

原理说明

TypeScript的条件类型对联合类型会自动触发分布式条件类型逻辑:条件会逐个作用于联合类型的每个成员,符合条件的成员会被保留并处理,不符合的返回never(never在联合类型中会被自动忽略),最终合并所有有效结果得到最终类型。

内容的提问来源于stack exchange,提问作者Max

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 11:34:54