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
相关产品推荐
相关产品推荐

