我很好奇为什么 TypeScript 转译器将枚举编译成字典查找而不是简单的对象。这是一个 TypeScript 枚举示例:
enum transactionTypesEnum {
None = 0,
OSI = 4,
RSP = 5,
VSP = 6,
SDIV = 7,
CDIV = 8
}
这是 TypeScript 发出的 JS 代码:
var TransactionTypes;
(function (TransactionTypes) {
TransactionTypes[TransactionTypes["None"] = 0] = "None";
TransactionTypes[TransactionTypes["OSI"] = 4] = "OSI";
TransactionTypes[TransactionTypes["RSP"] = 5] = "RSP";
TransactionTypes[TransactionTypes["VSP"] = 6] = "VSP";
TransactionTypes[TransactionTypes["SDIV"] = 7] = "SDIV";
TransactionTypes[TransactionTypes["CDIV"] = 8] = "CDIV";
})(TransactionTypes || (TransactionTypes = {}));
我的好奇心是想知道为什么 TypeScript 不简单地这样做:
var TransactionTypes = {
None: 0,
OSI: 4,
RSP: 5,
VSP: 6,
SDIV: 7,
CDIV: 8
}
最佳答案
TypeScript enum
类型提供安全的双向映射,因此您可以根据以下所有内容获取名称或值(例如获取值、从值中获取名称以及来自纯字符串的值)
enum Musketeers {
CAV = 0,
BAS = 1,
USR = 2
}
const selection = Musketeers.BAS;
// 1
console.log(selection);
const selectionName = Musketeers[selection];
// BAS
console.log(selectionName);
const fromString = Musketeers['BAS'];
// 1
console.log(fromString);
特别是字典不支持这一行(无需编写额外的代码):
// Gets the name from the value
const selectionName = Musketeers[1];
关于javascript - 为什么 TypeScript 转译器将枚举编译成字典查找而不是简单的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52929362/