比如有这样一个 Map:
const FruitMap = {
apple: '苹果',
orange: '橙子'
}
我写成 Enum:
enum FruitMap {
'apple' = '苹果',
'orange' = '橙子'
}
有时候我需要获取 Map 中的值,我会这样写:
const fruitName = FruitMap['apple']; // '苹果'
我感觉用 Enum 替代 Map 似乎不太合适,Enum 应该不是这么用的对吧?
比如有这样一个 Map:
const FruitMap = {
apple: '苹果',
orange: '橙子'
}
我写成 Enum:
enum FruitMap {
'apple' = '苹果',
'orange' = '橙子'
}
有时候我需要获取 Map 中的值,我会这样写:
const fruitName = FruitMap['apple']; // '苹果'
我感觉用 Enum 替代 Map 似乎不太合适,Enum 应该不是这么用的对吧?
|
EPr2hh6LADQWqRVHJan 5, 2021 via Android
1
enum 的问题在于
除了 FruitMap['apple'] === '苹果', FruitMap['苹果'] 也 === 'apple', 和对象以及 Map 还是有点不一样的 |
|
VegetableJan 5, 2021
2
啊当然不会,enum 的属性是只读的,不能改,只能读。
这咋当 Map 用啊。 |
|
3
@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.” |
|
gucheenJan 5, 2021
4
> 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 用就不对了 |
|
luobJan 5, 2021 via iPhone
5
type Fruit = "apple" | "orange"
这种写法可能会更合适。 |
|
EPr2hh6LADQWqRVHJan 5, 2021
6
@doommm 喔是真的,感谢了,原来这个问题是没有的,好魔幻
|
|
JackerissJan 5, 2021 via iPhone
7
这跟语言无关吧,枚举和 map 是两种东西,有什么理由用枚举代替 map ?
|
|
kangyanJan 6, 2021
8
完全不会...
|
|
hjylxmhzqJan 13, 2021
9
不会吧,毕竟除了 const enum 之外的 enum 都会转换成运行时的对象,如果不是为了语法上的清晰那为何不直接用对象
|
|
LeviathannJan 19, 2021
10
我写 js 的时候的确是用上面的写法模拟枚举。。
|