
比如有这样一个 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 @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 的时候的确是用上面的写法模拟枚举。。 |