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

如何从TypeScript字符串联合类型生成对应对象?

实现TypeScript类型与枚举对象的自动同步

你无法直接让TypeScript仅通过修改Color类型就自动生成运行时的Colors对象——因为TypeScript是静态类型系统,编译时的类型信息不会保留到运行时。但可以通过以下两种方式实现“只维护一处,自动同步类型和对象”的目标:

方案一:从类型约束对象,编译器强制同步

先定义Color类型,再用辅助函数创建Colors对象,确保对象的键值完全匹配类型成员,新增类型成员时编译器会主动报错提示你更新对象:

// 只需要在这里修改类型,新增颜色
type Color = "red" | "blue" | "green" | "yellow";

// 辅助函数,约束对象的键值必须与类型成员一致
const createEnumLike = <T extends string>(obj: { [K in T]: K }) => obj;

// 新增Color成员后,TypeScript会报错提示此处缺少对应属性,只需补充键值对
const Colors = createEnumLike<Color>({
  red: "red",
  blue: "blue",
  green: "green",
  yellow: "yellow"
});

// 客户端正常使用
console.log(Colors.red); // 输出 "red"

方案二:从数组反向推导(更推荐)

先定义包含所有颜色的const数组,再从数组自动推导Color类型和生成Colors对象,新增颜色只需修改数组:

// 只需要在这里新增颜色元素
const COLORS = ["red", "blue", "green", "yellow"] as const;

// 从数组自动推导Color类型
type Color = (typeof COLORS)[number];

// 从数组自动生成Colors对象
const Colors = Object.fromEntries(COLORS.map(color => [color, color])) as {
  [K in Color]: K
};

// 客户端正常使用
console.log(Colors.red); // 输出 "red"

这个方案更高效,完全不需要手动维护类型和对象的对应关系,新增颜色时只需要在COLORS数组里添加元素即可,类型和对象会自动同步更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 17:40:05