能否在TypeScript中将字符串字面量类型映射为键名?
问题解决:TypeScript中使用字符串字面量类型作为新类型键名
你遇到的错误是因为在定义类型对象的键时,没有使用TypeScript的计算属性键类型语法。直接写A['type']会被解析为普通标识符,而非类型查询表达式,编译器因此误以为你在把类型A当作值来使用。
正确写法
只需把键名用方括号[]包裹,让编译器识别这是一个类型表达式:
const a = { type: "key", actions: { a() {}, b() {}, }, } as const; type A = typeof a; // 修正后的类型定义 type T = { [A['type']]: A['actions']; };
验证结果
此时T的类型完全符合你的预期,等价于:
type T = { key: { a: () => void; b: () => void; }; };
拓展场景
如果需要处理多个可能的键名字面量,还可以使用通用映射类型:
// 定义通用模板 type GenericActionMap<K extends string> = { [Key in K]: { a: () => void; b: () => void }; }; // 传入字面量类型生成目标类型 type T2 = GenericActionMap<A['type']>; // 结果与T一致
内容的提问来源于stack exchange,提问作者jayatubi
相关产品推荐
相关产品推荐

