似乎从TypeScript 2.4开始String Enums是一个功能。
但以下情况不起作用:
enum Foo {
A = "A",
B = "B"
}
var foo : Foo = "A";
初始化程序类型字符串不能分配给变量类型Foo
字符串文字起作用:
type Foo = "A" | "B";
但是如果我想要使用enum
怎么办?有办法解决这个问题吗?
答案 0 :(得分:5)
由于Foo
是枚举,因此您也可以使用.
来访问enum
的值,如下所示
var foo : Foo = Foo.A;
答案 1 :(得分:3)
您可以使用索引表达式来获取枚举值:
enum Foo {
A = "A",
B = "BB"
}
var foo : Foo = Foo["A"];
var fooB : Foo = Foo["B"];
请注意,密钥将是成员的名称而不是值。
您也可以使用类型断言,但如果指定了错误的值,则不会出错:
var foo : Foo = "A" as Foo;
var foo : Foo = "D" as Foo; // No error
答案 2 :(得分:2)
你可以用不同的方式使用它:
Enum.A // Good way
Enum["A"] // Bad way
Enum[variable] // Good way
在你的情况下
enum Foo {
A = "A",
B = "B"
}
// Bad way
const example1 : Foo = Foo["A"];
// Good way
const example2 : Foo = Foo.A;
// Good way
const example3 : Foo = Foo[variable];
您应避免使用example1
,并专注于example2
和example3
。无论如何,写"A"
没有意义。
始终更喜欢Enum.A
,如果您想将变量转换为枚举,请使用Enum[variable]
。
答案 3 :(得分:0)
虽然不能直接回答问题本身(因为它没有分配给enum而是衍生类型),但我发现这确实解决了我允许我分配{的问题{1}}并保证它是枚举的一部分,甚至允许我在真正重要的是string
时避免多余的A = "A"
。
您可以使用A
[1]枚举keyof
枚举(typeof
)
Foo
或对象:
enum Foo {
A,
B
}
var foo : keyof typeof Foo = "A"; // OK
var foo : keyof typeof Foo = "C"; // ERROR
[*]我会将其他答案中的一个标记为已接受并保留此处以供参考