我想使用带有字符串值作为enum
键的TypeScript 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);
可以解决问题,但是我确定必须有一个更优雅的解决方案?
答案 0 :(得分:1)
使用联合类型而不是枚举。
type Type = 'value_a' | 'value_b';
const TYPES: Type[] = ['value_a', 'value_b'];
不好的是,它很少重复代码。
好处是,它很简单,不会遇到意外行为。归根结底,您不会在乎很少的代码重复。