比如有这样一个 Map:
const FruitMap = {
apple: '苹果',
orange: '橙子'
}
我写成 Enum:
enum FruitMap {
'apple' = '苹果',
'orange' = '橙子'
}
有时候我需要获取 Map 中的值,我会这样写:
const fruitName = FruitMap['apple']; // '苹果'
我感觉用 Enum 替代 Map 似乎不太合适,Enum 应该不是这么用的对吧?
1
EPr2hh6LADQWqRVH 2021-01-05 17:58:38 +08:00 via Android
enum 的问题在于
除了 FruitMap['apple'] === '苹果', FruitMap['苹果'] 也 === 'apple', 和对象以及 Map 还是有点不一样的 |
2
Vegetable 2021-01-05 18:07:30 +08:00
啊当然不会,enum 的属性是只读的,不能改,只能读。
这咋当 Map 用啊。 |
3
doommm 2021-01-05 18:11:35 +08:00 1
@avastms 不对吧,当 enum 的 value 值是字符串的时候,FruitMap['苹果'] 这种写法是无效的,文档里有提到 https://www.typescriptlang.org/docs/handbook/enums.html#reverse-mappings
“Keep in mind that string enum members do not get a reverse mapping generated at all.” |
4
gucheen 2021-01-05 18:18:33 +08:00
> Enums allow a developer to define a set of named constants. Using enums can make it easier to document intent, or create a set of distinct cases.
官方文档一开始就说明了这个 Enum 的用途,其实就是一组具名常量。 你通过 Enum 获取 value 是没问题的,但是把它当成 Map 或者 Object 用就不对了 |
5
luob 2021-01-05 18:19:34 +08:00 via iPhone
type Fruit = "apple" | "orange"
这种写法可能会更合适。 |
6
EPr2hh6LADQWqRVH 2021-01-05 18:20:08 +08:00
@doommm 喔是真的,感谢了,原来这个问题是没有的,好魔幻
|
7
Jackeriss 2021-01-05 18:20:57 +08:00 via iPhone
这跟语言无关吧,枚举和 map 是两种东西,有什么理由用枚举代替 map ?
|
8
kangyan 2021-01-06 17:43:59 +08:00
完全不会...
|
9
hjylxmhzq 2021-01-13 23:30:16 +08:00
不会吧,毕竟除了 const enum 之外的 enum 都会转换成运行时的对象,如果不是为了语法上的清晰那为何不直接用对象
|
10
Leviathann 2021-01-19 22:27:01 +08:00
我写 js 的时候的确是用上面的写法模拟枚举。。
|