Typescript将枚举值数组分配给错误的类型。

19 浏览
0 Comments

Typescript将枚举值数组分配给错误的类型。

所以我有如下的代码:

enum AnimalId {
  Dog = 2,
  Cat = 3
}
const animalIds: AnimalId[] = [AnimalId.Dog, 4];

为什么 TypeScript 没有显示错误,即 id 4 无法分配给类型 AnimalId[]?

0
0 Comments

Typescript中给枚举值数组赋予了错误的类型的问题的出现主要原因是Typescript允许使用位运算符在标志数字枚举上进行操作,而对于字符串枚举没有类似的功能。

这个问题的原因在于位运算的需求。有时候我们希望通过`SomeFlag.Foo | SomeFlag.Bar`来得到另一个`SomeFlag`的值,但实际上得到的是一个数字类型的值,并且不希望再进行强制类型转换回`SomeFlag`。如果我们还能重新设计Typescript并且保留枚举的话,我们可能会为位标志(bit flags)提供一个单独的构造方法。

解决这个问题的方法是使用类型断言来将数组转化为枚举值数组。具体代码如下:

enum SomeFlag {
  Foo = 1,
  Bar = 2,
}
const flags = [SomeFlag.Foo, SomeFlag.Bar] as SomeFlag[];

通过使用类型断言`as SomeFlag[]`,我们将数组`flags`的类型指定为`SomeFlag[]`,从而解决了Typescript给枚举值数组错误赋予类型的问题。

如果你希望了解更多关于这个的问题和解决方案,可以参考这里的讨论。

0
0 Comments

Typescript is assigning incorrect type to array of enum values的问题出现的原因是在声明enum类型的数组时,Typescript将数组中的元素类型错误地赋值为number类型。解决方法是使用字符串代替数字来声明enum的值。

具体的解决方法如下所示:

enum AnimalId {
  Dog = "2",
  Cat = "3"
}
const animalIds: AnimalId[] = [AnimalId.Dog, 4]; //  Type 'number' is not assignable to type 'AnimalId'.

你可以通过在enum中使用字符串而不是数字来解决这个问题。在上述示例中,我们将Dog的值从2更改为"2",以确保正确的类型分配。

你可以在TS Playground中查看和测试这个问题的解决方案:https://www.typescriptlang.org/play?#code/KYOwrgtgBAgiCWECGAbAkgEygbwFBSgBEB7AcygF4oAiAJmoBp8oBhJAF0poGZrcBfXLgDGxEAGdOSBMnQZxALlgzUmANoBdLmriJVGAHQlSDKABYNAblxA

0