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

TypeScript映射类型:能否将多属性对象转单属性对象联合类型?

TypeScript 对象类型转单属性对象联合类型实现

结论

可以实现该类型转换,依托TypeScript原生映射类型+索引访问特性即可完成,无需额外复杂类型依赖。

具体实现

首先定义通用转换工具类型:

type ToSinglePropUnion<T> = {
  [K in keyof T]: { [P in K]: T[P] }
}[keyof T]

针对示例的使用方式如下,转换结果完全匹配目标类型:

type input = {
    a: 1;
    b: 2;
    c: 3;
};

type output = ToSinglePropUnion<input>;
// 等价于 type output = { a: 1 } | { b: 2 } | { c: 3 }

可通过以下代码验证类型正确性:

// 符合约束,编译正常通过
const valid1: output = { a: 1 };
const valid2: output = { b: 2 };
const valid3: output = { c: 3 };

// 不符合约束,TS会抛出类型错误
// const invalid1: output = { a: 1, b: 2 };
// const invalid2: output = { d: 4 };

实现逻辑

  • 映射类型语法[K in keyof T]会遍历入参类型T的所有键,为每个键单独生成对应的映射值类型
  • 遍历到单个键K时,构造的映射值为仅包含K这一个属性的对象,属性值类型和原类型T中K对应的类型完全一致
  • 最终通过[keyof T]索引访问前面构造的映射类型,会取出该映射类型下所有属性的值类型,自动合并为联合类型,正好匹配目标输出结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:06:25