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

如何基于TypeScript数字枚举推断严格键值对象类型?

解决方案

要实现键为LogLevel枚举数值、值为对应枚举名称的严格类型约束对象,可以利用TypeScript的映射类型结合枚举的反向映射特性:

首先定义约束类型:

type LogLevelNameMap = {
  [K in LogLevel]: typeof LogLevel[K];
};

然后创建符合该类型的对象:

const logLevelNames: LogLevelNameMap = {
  [LogLevel.NONE]: 'NONE',
  [LogLevel.ERROR]: 'ERROR',
  [LogLevel.WARNING]: 'WARNING',
  [LogLevel.INFO]: 'INFO',
  [LogLevel.DEBUG]: 'DEBUG',
};

类型约束说明

  • 映射类型[K in LogLevel]会遍历LogLevel的所有数值枚举成员,确保对象包含所有枚举值作为键;
  • typeof LogLevel[K]利用数字枚举的反向映射特性,直接获取该数值对应的枚举名称字符串类型,保证每个键对应的值必须是其专属的枚举名称,完全杜绝键值不匹配的情况。

错误验证

如果尝试给键设置不匹配的枚举名称,TypeScript会直接抛出类型错误:

// 报错:类型 '"WARNING"' 不能赋值给类型 '"ERROR"'
const invalidMap: LogLevelNameMap = {
  [LogLevel.NONE]: 'NONE',
  [LogLevel.ERROR]: 'WARNING', // 此处不符合类型约束
  [LogLevel.WARNING]: 'WARNING',
  [LogLevel.INFO]: 'INFO',
  [LogLevel.DEBUG]: 'DEBUG',
};

内容的提问来源于stack exchange,提问作者Slava.In

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 16:07:08