Typescript 使用枚举作为类型允许不使用';不存在于枚举中
我有这个类型脚本代码(): 我不明白为什么15在这种情况下是一个可接受的值。15不是枚举的值,所以它不应该抛出吗?(更新2021-06-10,此值由保持不变) 这是(可能令人惊讶的)预期行为。TypeScript中的数字枚举有时用于按位操作,其中列出的值被视为。并且,如a中所述,关于这一点: 我们不区分标志和非标志枚举,因此高于[或不等于]任何给定枚举成员的数字不一定无效。比如说Typescript 使用枚举作为类型允许不使用';不存在于枚举中,typescript,enums,Typescript,Enums,我有这个类型脚本代码(): 我不明白为什么15在这种情况下是一个可接受的值。15不是枚举的值,所以它不应该抛出吗?(更新2021-06-10,此值由保持不变) 这是(可能令人惊讶的)预期行为。TypeScript中的数字枚举有时用于按位操作,其中列出的值被视为。并且,如a中所述,关于这一点: 我们不区分标志和非标志枚举,因此高于[或不等于]任何给定枚举成员的数字不一定无效。比如说 enum标志{ 整洁=1, 酷=2, 好的=4 } //喜欢说整洁、酷、棒 变量x:Flags=7 因此,即使7不等
enum标志{
整洁=1,
酷=2,
好的=4
}
//喜欢说整洁、酷、棒
变量x:Flags=7代码>
因此,即使7
不等于列出的标志
枚举值中的任何一个,您仍然可以通过对列出的值执行位操作来获得它。我很确定编译器除了检查值是否为数字
之外,不会做任何限制
在您的情况下,即使没有一个Something
枚举值是15
,它也不会阻止您执行以下操作(无用且可疑正常):
const value: Something = (Something.Email | Something.All) >> 1;
这相当于相同的事情(10 | 20
的计算结果为30
,而30>>1
是15
)
请注意,这种按位方式不适用于基于字符串的枚举,因此处理这种情况的一种方法是将数字更改为字符串文字:
const enum Something {
None = '0',
Email = '10',
All = '20'
}
const value: Something = '15'; // error, as desired
编译器会警告您,'15'
不是某物的有效值
希望有帮助。祝你好运 检查这个答案:我相信这里已经回答了这个问题:
const enum Something {
None = '0',
Email = '10',
All = '20'
}
const value: Something = '15'; // error, as desired