Typescript 使用字符串枚举作为映射键
我想使用字符串值为Typescript 使用字符串枚举作为映射键,typescript,enums,Typescript,Enums,我想使用字符串值为Map键的TypeScriptenum: enum Type { a = 'value_a', b = 'value_b' } const values = new Map<Type, number>(); // set a single value values.set(Type.a, 1); 但是,这会导致我的编译错误“不能将'string'类型的参数分配给'type'类型的参数。” 这里推荐的解决方案是什么?执行a值设置(类型[t]为类型
Map
键的TypeScriptenum
:
enum Type {
a = 'value_a',
b = 'value_b'
}
const values = new Map<Type, number>();
// set a single value
values.set(Type.a, 1);
但是,这会导致我的编译错误“不能将'string'类型的参数分配给'type'类型的参数。”
这里推荐的解决方案是什么?执行a值设置(类型[t]为类型,0)代码>确实有效,但我相信一定有更优雅的解决方案
使用联合类型而不是枚举
type Type = 'value_a' | 'value_b';
const TYPES: Type[] = ['value_a', 'value_b'];
糟糕的是,它几乎没有代码重复
好的是,它很简单,你不会遇到意想不到的行为。最终,您不会介意代码的少量重复。使用联合类型而不是枚举
type Type = 'value_a' | 'value_b';
const TYPES: Type[] = ['value_a', 'value_b'];
糟糕的是,它几乎没有代码重复
好的是,它很简单,你不会遇到意想不到的行为。在一天结束时,您不会介意少量代码重复。问题是Type[t]
可以为您提供枚举值或枚举键:Type['a']=='value\u a'
和Type['value\u a']=='a'
。其中只有一个是Type.a
。这是因为enum E{A,B}
实际上生成E={0:“A”,1:“B”,“A”:0,“B”:1}
-它以双向方式生成绑定,以确保没有重复项,并且您可以轻松地以任何一种方式访问它们。问题是类型[t]
可能会给您枚举值或枚举键:类型['A']=='value\u a'
和类型['value\u a']='a'
。其中只有一个是Type.a
。这是因为enum E{A,B}
实际上生成E={0:“A”,1:“B”,“A”:0,“B”:1}
——它以双向方式生成绑定,以确保没有重复项,并且您可以轻松地以任何一种方式访问它们。