Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 使用字符串枚举作为映射键_Typescript_Enums - Fatal编程技术网

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
键的TypeScript
enum

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}
——它以双向方式生成绑定,以确保没有重复项,并且您可以轻松地以任何一种方式访问它们。