我的代码非常简单:
enum Color { BLUE, RED }
class Brush {
color: Color
constructor(values) {
this.color = values.color
}
}
let JSON_RESPONSE = `{"color": "BLUE"}`
let brush = new Brush(JSON.parse(JSON_RESPONSE))
现在我想检查一下:
console.log(brush.color === Color.BLUE)
它返回false
。
我尝试了一些像
这样的组合brush.color === Color[Color.BLUE]
但是,当然会遇到编译器错误。
问题是如何进行基本比较enum === enum
?
答案 0 :(得分:3)
问题是TypeScript enum
实际上是#34;命名为数字常量。"
来自the TypeScript documentation on enum
s:
Enums允许我们定义一组命名的数字常量。
枚举的主体由零个或多个枚举成员组成。枚举成员具有与之关联的数值( sic )。 。
您应该使用string literal types代替:
type Color = "BLUE" | "RED";
<小时/>
type Color = "BLUE" | "RED";
class Brush {
color: Color
constructor(values) {
this.color = values.color
}
}
let JSON_RESPONSE = `{"color": "BLUE"}`
let brush = new Brush(JSON.parse(JSON_RESPONSE))
console.log(brush.color === "BLUE"); //=> true
答案 1 :(得分:2)
另一种(available since TS 2.4)是String enums:
enum Color {
BLUE = "BLUE",
RED = "RED"
}
console.log('BLUE' === Color.BLUE); // true
由于没有针对字符串枚举的反向映射(至少在2020年),因此强烈建议考虑使用const
修饰符对它们进行内联。