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

将映射类型扁平化为交集并移除用于创建它的迭代联合键

如何将TypeScript映射生成的嵌套对象类型合并为扁平对象类型?

先看示例代码:

type MyUnion = "a" | "b";

type Result = {
  [K in MyUnion]: Record<`${K}_1`, { v: `${K}_2` }>;
};
// 当前Result类型:{ a: Record<"a_1", { v: "a_2"; }>; b: Record<"b_1", { v: "b_2"; }>; }

// 想要得到的目标类型:
type DesiredResult = { "a_1": { v: "a_2" }; "b_1": { v: "b_2" }; };

要把Result转换成DesiredResult,可以通过索引访问+交叉类型自动合并的方式实现:

type MergeNestedObjects<T> = T[keyof T];

// 直接使用这个工具类型转换Result
type FinalResult = MergeNestedObjects<Result>;
// FinalResult的类型就是:{ "a_1": { v: "a_2"; }; "b_1": { v: "b_2"; }; }

原理说明

  1. keyof Result会提取Result的所有键,也就是"a" | "b";
  2. Result[keyof Result]相当于Result["a"] & Result["b"],也就是两个单键对象的交叉类型:Record<"a_1", ...> & Record<"b_1", ...>;
  3. TypeScript会自动将这种无冲突的交叉单键对象合并成一个扁平的对象类型,正好符合我们想要的DesiredResult结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 14:52:09