使用字符串枚举作为Map键

时间:2019-09-13 11:25:03

标签: typescript enums

我想使用带有字符串值作为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);可以解决问题,但是我确定必须有一个更优雅的解决方案?

Code in TypeScript Playground

1 个答案:

答案 0 :(得分:1)

使用联合类型而不是枚举。

type Type = 'value_a' | 'value_b';
const TYPES: Type[] = ['value_a', 'value_b'];

不好的是,它很少重复代码。

好处是,它很简单,不会遇到意外行为。归根结底,您不会在乎很少的代码重复。