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

Angular 4字符串枚举反向映射实现问题求助

解决TypeScript字符串枚举的反向映射问题

嘿,我懂你现在的需求——从TokenLength枚举的取值('6'或'8')反向拿到对应的枚举键('SIX'或'EIGHT')对吧?

首先得说明一下:TypeScript里数字枚举会自动生成双向映射,但字符串枚举不会,所以你之前用for...in遍历只能拿到键和正向的值,没法直接反向查找。不过我们可以自己实现这个逻辑,有两种常用方案:

方案一:写一个动态查找函数

如果你的枚举可能会变动,或者不需要频繁查找,写一个通用函数来匹配值和键就很合适:

export enum TokenLength {
  SIX = '6',
  EIGHT = '8',
}

function getTokenLengthKey(value: string): keyof typeof TokenLength | undefined {
  // 遍历枚举的所有键
  for (const key in TokenLength) {
    // 类型断言确保key是枚举的合法键
    if (TokenLength[key as keyof typeof TokenLength] === value) {
      return key as keyof typeof TokenLength;
    }
  }
  // 没有匹配到值时返回undefined
  return undefined;
}

// 测试一下
console.log(getTokenLengthKey('6')); // 输出:'SIX'
console.log(getTokenLengthKey('8')); // 输出:'EIGHT'
console.log(getTokenLengthKey('12')); // 输出:undefined

方案二:预定义反向映射对象

如果需要频繁做反向查找,预先生成一个反向映射对象会更高效,避免每次都遍历枚举:

export enum TokenLength {
  SIX = '6',
  EIGHT = '8',
}

// 手动创建反向映射,键是枚举值,值是枚举键
const TokenLengthReverse: Record<string, keyof typeof TokenLength> = {
  [TokenLength.SIX]: 'SIX',
  [TokenLength.EIGHT]: 'EIGHT',
};

// 使用起来更简洁
console.log(TokenLengthReverse['6']); // 输出:'SIX'
console.log(TokenLengthReverse['8']); // 输出:'EIGHT'

为什么你之前的代码没实现需求?

你可以看看TokenLength枚举编译后的JavaScript代码,它只有正向的键值对:

var TokenLength;
(function (TokenLength) {
    TokenLength["SIX"] = "6";
    TokenLength["EIGHT"] = "8";
})(TokenLength || (TokenLength = {}));

所以for...in遍历到的enumMember是'SIX'和'EIGHT',通过this.tokenLength[enumMember]拿到的是对应的'6'和'8',但反过来要找值对应的键,就需要手动遍历匹配啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:17:50