背景
在 TypeScript 中,通常基于数值来创建 enum 类型,例如:
enum Direction {
Up = 1,
Down,
Left,
Right,
}
这样的话,Direction.Up
、Direction.Down
、Direction.Left
、Direction.Right
的取值就分别为 1
、2
、3
、4
。
但前两天我遇到了一个比较奇怪的问题:后端传来一个值,我需要检查一下它属于该 enum 类型中的哪个类别,然后据此执行后续逻辑。类似于这样:
if (someValue === Direction.Up) {
// some logics
}
// some other logics
但奇怪的是,我收到的 someValue
并不是 1
、2
、3
、4
这些数值,而是 "Up"
、"Down"
、"Left"
、"Right"
这样的字符串!
而且我还没办法修改那个 enum Direction
的声明,因为这个从一个根据我们写的 Protobuf 自动生成的类型库里 import 进来的。
这样的话,用 if (someValue === Direction.Up)
做比较就永远会返回 false
了。
解决方法
这个时候就需要一个能拿到 enum 类型键名的方法。搜了一下,还真有:
Direction[Direction.Up] // "Up"
这个设计也真是绝了。。