无法为typescript enum分配字符串值(初始化器类型字符串不能分配给变量类型)

时间:2018-05-22 09:24:46

标签: typescript enums

似乎从TypeScript 2.4开始String Enums是一个功能。

但以下情况不起作用:

enum Foo {
    A = "A",
    B = "B"
}

var foo : Foo = "A";
  

初始化程序类型字符串不能分配给变量类型Foo

字符串文字起作用:

type Foo = "A" | "B";

但是如果我想要使用enum怎么办?有办法解决这个问题吗?

4 个答案:

答案 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 documentation

所述

你可以用不同的方式使用它:

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,并专注于example2example3。无论如何,写"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

[*]我会将其他答案中的一个标记为已接受并保留此处以供参考