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

能否在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:07:15