【发布时间】:2020-01-15 06:41:24
【问题描述】:
我想使用 TypeScript enum,字符串值为 Map 键:
enum Type {
a = 'value_a',
b = 'value_b'
}
const values = new Map<Type, number>();
// set a single value
values.set(Type.a, 1);
这很好用。我只能设置枚举中定义的键。现在我想填充地图,并为 Type 枚举中的所有条目设置值:
// trying to set all values
for (const t in Type) {
values.set(Type[t], 0); // error
}
然而,这给了我的编译错误“'string' 类型的参数不可分配给'Type' 类型的参数。”
这里推荐的解决方案是什么?执行values.set(Type[t] as Type, 0); 可以解决问题,但我确定一定有更优雅的解决方案?
【问题讨论】:
-
问题在于
Type[t]可以为您提供枚举值或枚举键:Type['a'] == 'value_a'和Type['value_a'] == 'a'。其中只有一个是Type.a。这是因为enum E {A, B}实际上会生成E = { 0: "A", 1: "B", "A": 0, "B": 1}- 它会生成两种绑定以确保没有重复项,并且您可以轻松地以任何一种方式访问它们。
标签: typescript enums