fas*_*sth 8 javascript enums json typescript angular
我有非常简单的代码:
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))
Run Code Online (Sandbox Code Playgroud)
现在我想检查一下:
console.log(brush.color === Color.BLUE)
Run Code Online (Sandbox Code Playgroud)
它返回false。
我尝试了一些组合,例如
brush.color === Color[Color.BLUE]
Run Code Online (Sandbox Code Playgroud)
但是,当然,遇到了编译器错误。
问题是如何进行相当基本的比较enum === enum?
问题在于 TypeScriptenum实际上是“命名数字常量”。
来自s上enum的打字稿文档:
枚举允许我们定义一组命名的数字常量。
枚举的主体由零个或多个枚举成员组成。Enum 成员具有与其关联的数值 ( sic )。. .
您应该改用字符串文字类型:
type Color = "BLUE" | "RED";
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
另一种选择(自 TS 2.4 起可用)是String enums:
enum Color {
BLUE = "BLUE",
RED = "RED"
}
console.log('BLUE' === Color.BLUE); // true
Run Code Online (Sandbox Code Playgroud)
由于字符串枚举没有反向映射(至少在 2020 年),因此人们可能会强烈考虑使用const修饰符内联它们。
| 归档时间: |
|
| 查看次数: |
6440 次 |
| 最近记录: |