提问者:小点点

是否将整数用作具有Typescript枚举的值?


当在Typescript枚举中使用整数作为值时,它们似乎都变成键。 下面是一个例子:


enum Precision {
  ONE = 1,
  TWO = 2
}

const keys = Object.keys(Precision)
console.log(keys) //["1", "2", "ONE", "TWO"]

同样,如果我们尝试获得如下值:

let v:number[] = Object.keys(Precision).map(key => Precision[key])

console.log(v)  //["ONE", "TWO", 1, 2]

这是虫子吗? 是否有可能使用整数值并得到预期的语义? 当使用string值时,上面的示例证明是正确的。 下面是一个完整的演示:

https://stackblitz.com/edit/typescript-enum-values


共1个答案

匿名用户

这就是enum在Typescript中的工作方式。 它创建一个对象,该对象将字符串键映射到数字,并将数字映射回这些键(文档)

反向映射

除了为成员创建具有属性名的对象外,数值枚举成员还获得从枚举值到枚举名称的反向映射。 例如,在本例中:

这就是枚举如何转换为javascript(打字脚本游戏)

var Precision;
(function (Precision) {
    Precision[Precision["ONE"] = 1] = "ONE";
    Precision[Precision["TWO"] = 2] = "TWO";
})(Precision || (Precision = {}));

这是一种别出心裁的写作方式:

var Precision = {}
Precision[1] = "ONE";
Precision[2] = "TWO";

Precision["ONE"] = 1
Precision["TWO"] = 2

这使您可以很容易地使用括号表示法将字符串值转换为数字,并将数字值转换为字符串。