gpt4 book ai didi

typescript - TypeScript 中的数字枚举允许任何数字,而字符串枚举则不允许

转载 作者:搜寻专家 更新时间:2023-10-30 21:26:55 25 4
gpt4 key购买 nike

假设我有一个数字枚举:

const enum EStatus {
Busy = 0,
Available = 1,
Away = 2
}

当我执行以下操作时,TypeScript 不会报错:

const status: EStatus = 4

但是如果我有一个字符串枚举:

const enum EDayOfWeekend {
Saturday = "Saturday",
Sunday = "Sunday"
}

当我尝试执行以下操作时,TypeScript 报错:

const dayOfWeekend: EDayOfWeekend = "Tuesday"

我本来希望 TypeScript 能够与允许两者一致,或者不允许两者一致。 IMO 它应该不允许允许使用定义值以外的任何东西,或者甚至更好地强制您只能使用枚举本身来初始化变量,例如

const dayOfWeekend = EDayOfWeekend.Saturday

我很想知道为什么 TypeScript 中存在这种不一致,以及它是否是设计使然。

最佳答案

行为差异的主要原因是能够拥有标志编号枚举并在其上使用按位运算符。对于字符串枚举,没有等效的功能。在这个 GhitHub issue Daniel Rosenwasser 明确了编译器团队的推理:

The behavior is motivated by bitwise operations. There are times when SomeFlag.Foo | SomeFlag.Bar is intended to produce another SomeFlag. Instead you end up with number, and you don't want to have to cast back to SomeFlag`. I think if we did TypeScript over again and still had enums, we'd have made a separate construct for bit flags.

关于typescript - TypeScript 中的数字枚举允许任何数字,而字符串枚举则不允许,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53496711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com