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

如何在TypeScript中从对象键值对生成对应类型

如何在TypeScript中基于静态对象生成对应联合类型?

给定如下静态对象:

const map = {
    'hello': {a: 1, b: false},
    'world': {b: 'hello', c: null}
};

想要生成每个键对应包含type字段的联合类型:

type MapType = {
    type: 'hello',
    a: 1,
    b: false,
} | {
    type: 'world',
    b: 'hello',
    c: null,
}

你之前的写法会生成所有键与所有值的交叉组合,是因为没有将键和对应的值类型一一绑定。这个需求完全可以实现,具体步骤如下:

步骤1:确保对象类型保留字面量细节

首先给原对象加上as const断言,让TypeScript保留所有值的字面量类型(比如1而不是number,'hello'而不是string):

const map = {
    'hello': {a: 1, b: false},
    'world': {b: 'hello', c: null}
} as const;

步骤2:用映射类型生成一一对应的联合类型

通过映射类型遍历每个键,将type字段与对应的值类型绑定,最后提取联合类型:

type MapType = {
  [K in keyof typeof map]: { type: K } & typeof map[K]
}[keyof typeof map];

写法解释

  • [K in keyof typeof map]:遍历map的每个键K
  • { type: K } & typeof map[K]:为每个键K生成一个对象类型,包含type字段(值为键名)和对应的值类型
  • [keyof typeof map]:访问映射类型的所有属性,最终得到各个键对应类型的联合,而不是交叉组合

此时生成的MapType就是你需要的目标类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 12:56:00