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

TypeScript中如何将联合类型映射为编译期固定值?

联合类型的编译期固定值映射实现

先回顾对象类型的实现方式:当我们有一个对象类型时,可以通过映射类型实现编译期的固定值映射,让类型系统能精确推断出对应值的字面量类型:

type MyType = {
  a: string;
  b: string;
}

const MyMapping: { [k in keyof MyType]: number } = {
  a: 3,
  b: 2,
}

type X = typeof MyMapping['a'] // 类型为3

针对联合类型(如type MyType = 'a' | 'b'),同样可以实现类似效果,核心是利用as const断言结合映射类型,具体有两种实现方式:

方式1:直接使用as const断言

这种方式简洁直接,通过as const让TypeScript将对象的属性值推断为字面量类型:

type MyType = 'a' | 'b';

const MyMapping = {
  a: 3,
  b: 2,
} as const;

type X = typeof MyMapping['a']; // 类型为3

方式2:结合映射类型约束键的范围

如果需要强制映射对象的键完全覆盖联合类型的所有成员,可以用映射类型约束,同时搭配as const固定值的字面量类型:

type MyType = 'a' | 'b';

const MyMapping: { [K in MyType]: number } = {
  a: 3,
  b: 2,
} as const;

type X = typeof MyMapping['a']; // 类型为3

这种方式的优势在于,当联合类型MyType新增成员时,TypeScript会报错提示你补充映射对象对应的键值对,避免遗漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:50:50