typescript - 关于枚举中「反向映射」的小概念实验

4,977 阅读1分钟

typescript - 关于枚举中「反向映射」的小概念实验

最近在做需求的时候发现了一个枚举代码的写法很奇怪,就仔细看了一遍文档,下面把实验结果列出来。

概念:

反向映射: 举例,

enum T {
  全职 = 1,
  实习 = 2,
  顾问 = 3,
  外包 = 4,
  劳务 = 5,
};
console.log(T)
// 会被翻译成下面的情况
// 1: "全职"
// 2: "实习"
// 3: "顾问"
// 4: "外包"
// 5: "劳务"
// 全职: 1
// 劳务: 5
// 外包: 4
// 实习: 2
// 顾问: 3

反向映射

除了创建一个以属性名做为对象成员的对象之外,数字枚举成员还具有了 反向映射,从枚举值到枚举名字。 注:英文意思一样,都只说了数字枚举。 www.typescriptlang.org/docs/handbo…

问题:

那么问题来了,我看到的代码中一个变量也出现了反向映射,导致出现了预期以外的情况。 是不是文档没说全呀?

实验:

枚举量T是我 模拟当时的情况,枚举量Z是我做的实验。

const A = '实习A';
const B = '顾问B';
const C = '外包C';
const D = '劳务D';
const E = '全职E';

export enum T {
  A,
  B,
  C,
  D,
  E,

};

export enum Z {
  A = '1' + '2',
  B = '123',
  C = 0,
  D,
  E,
}

实验链接 应该是只有「常数枚举表达式」得出的结果是字符串型的时候才会不出现反向映射,其他的情况都有可能出现。

总结

1 对于枚举,不建议出现奇怪的写法,否则反向映射会出现奇怪的结果。 尤其是select表单哦。
2 TS现在的文档真的不好看。