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

能否基于TypeScript的string union类型生成匹配的键值对象?

解决方案

首先明确结论:无法直接从TypeScript字符串联合类型生成运行时对象。因为TypeScript的类型仅存在于编译阶段,编译为JavaScript后所有类型信息会被完全擦除,没有残留信息可以用来构造运行时对象。

不过你可以反过来实现,先定义运行时常量,再从常量自动推导类型,完全符合DRY原则,全程只需要编写一次枚举值,不需要重复硬编码:

实现方式1:从常量数组生成对象+推导类型

这种方式只需编写一次所有枚举值,即可同时得到联合类型和目标对象:

// 1. 仅需在这里一次写入所有枚举值,后续自动推导
const exampleValues = ["foo", "bar", "baz"] as const;

// 2. 自动推导得到字符串联合类型
type Example = typeof exampleValues[number]; // 等价于 "foo" | "bar" | "baz"

// 3. 自动生成目标结构的对象
const example = exampleValues.reduce((res, key) => {
  res[key] = key;
  return res;
}, {} as Record<Example, Example>);

生成的example对象完全符合你要求的结构,且自带严格类型约束。

实现方式2:从常量对象推导类型

如果允许先定义对象,写法更简洁,同样只需要写一次枚举值:

// 1. 定义常量对象,as const 避免类型被拓宽为通用string
const example = {
  foo: "foo",
  bar: "bar",
  baz: "baz"
} as const;

// 2. 自动推导得到字符串联合类型
type Example = keyof typeof example; // 等价于 "foo" | "bar" | "baz"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:45:02