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

如何基于联合类型的键创建带不同值类型的TypeScript类型?

解决方案

你可以通过类型映射表+映射类型的组合实现需求,既能让MyRecord严格关联MyUnion的键集合,又能为每个键绑定对应具体类型,步骤如下:

  1. 先定义类型映射表,把MyUnion的每个键和对应Item类型一一绑定:
type ItemTypeMap = {
  item1: Item1Type;
  item2: Item2Type;
};

这个映射表会被TypeScript自动检查:如果MyUnion的键在表中无对应项,或者表中出现MyUnion外的键,都会触发类型报错,确保映射关系完整。

  1. 用映射类型遍历MyUnion的所有成员,生成严格约束的MyRecord:
type MyRecord = {
  [K in MyUnion]: ItemTypeMap[K];
};

效果验证

  • 误写item3这类MyUnion外的键时,TypeScript直接报错:
// 错误:类型“"item3"”的属性不在类型“MyRecord”中
const invalidRecord: MyRecord = {
  item1: {a: 4, b: 5},
  item2: {c: 6, d: 7},
  item3: {}
};
  • 遗漏MyUnion中的键时,同样触发报错:
// 错误:类型 "{ item1: { a: number; b: number; }; }" 中缺少属性 "item2"
const incompleteRecord: MyRecord = {
  item1: {a: 4, b: 5}
};
  • 每个键的类型也会被严格约束,比如把item1的类型写成Item2Type也会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:27:07