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

如何将嵌套联合类型转换为顶层联合类型

如何展开元组内的联合类型到顶层联合?

给定如下TypeScript联合类型:

type someUnionType = [1 | 2 | 3,"Some value"] | [4,"Another value"];

需要将其转换为每个元组内联合成员都展开的顶层联合:

type anotherUnionType = [1,"Some value"] | [2,"Some value"] | [3,"Some value"] | [4,"Another value"];

你的实现问题分析

你尝试的代码逻辑存在错误,导致最终得到never类型:

  • isAUnionAtTopLevel的判断逻辑偏离需求,U[any]针对元组类型会提取所有元素的联合,无法准确识别元组第一个元素是否为联合类型;
  • convertToFlat中infer out extends value的写法不符合类型推断规则,无法正确提取并展开联合成员。

正确实现方案

利用TypeScript的分布式条件类型可以轻松实现需求,直接遍历联合中的每个元组,展开元组内的联合成员并重组元组:

type someUnionType = [1 | 2 | 3,"Some value"] | [4,"Another value"];

// 展开元组内的联合类型到顶层联合
type FlattenTupleUnion<T> = T extends [infer A, infer B] 
  ? A extends any 
    ? [A, B] 
    : never 
  : never;

type anotherUnionType = FlattenTupleUnion<someUnionType>;
// 类型结果:[1, "Some value"] | [2, "Some value"] | [3, "Some value"] | [4, "Another value"]

工作原理

  1. T extends [infer A, infer B]:将联合中的每个元组拆解为第一个元素A和第二个元素B;
  2. A extends any:触发分布式条件类型,将A中的每个联合成员单独处理;
  3. [A, B]:把每个单独的A成员和固定的B重组为新元组;
  4. 所有新元组自动合并为顶层联合,得到最终目标类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 22:33:15