代码如下:
enum AnimalId {
Dog = 2,
Cat = 3
}
const animalIds: AnimalId[] = [AnimalId.Dog, 4];
为什么Typescript没有显示id 4不能分配给类型AnimalId[]的错误?
行为差异的主要原因是具有标志号枚举和对其使用位操作符的能力。对于字符串枚举,没有等效的特性。
以下是Daniel Rosenwasser对GH的推理:
该行为是由位操作驱动的。有些时候SomeFlag。Foo | SomeFlag。Bar旨在生成另一个SomeFlag。相反,你最终得到number,而你不想进行强制转换回到SomeFlag’。我想如果我们再做一次TypeScript如果有枚举,我们会为位标志单独构造。
你可以用字符串代替数字来解决这个问题:
enum AnimalId {
Dog = "2",
Cat = "3"
}
const animalIds: AnimalId[] = [AnimalId.Dog, 4]; // ❌ Type 'number' is not assignable to type 'AnimalId'.
TS Playground: https://www.typescriptlang.org/play?#code/KYOwrgtgBAgiCWECGAbAkgEygbwFBSgBEB7AcygF4oAiAJmoBp8oBhJAF0poGZrcBfXLgDGxEAGdOSBMnQZxALlgzUmANoBdLmriJVGAHQlSDKABYNAblxA