如果我有枚举:
enum MyEnum {
foo = 'FOO',
bar = 'BAR',
}
常量字符串确认测试的结果如下:
type StringIsInEnum = 'FOO' extends MyEnum ? true : false; // false
有人能解释一下为什么在这种情况下,'FOO'
不是MyEnum
的延伸吗?
MyEnum.foo
在运行时不会改变,'FOO'
是一个常量值,因此也永远不会改变.
如果我有枚举:
enum MyEnum {
foo = 'FOO',
bar = 'BAR',
}
常量字符串确认测试的结果如下:
type StringIsInEnum = 'FOO' extends MyEnum ? true : false; // false
有人能解释一下为什么在这种情况下,'FOO'
不是MyEnum
的延伸吗?
MyEnum.foo
在运行时不会改变,'FOO'
是一个常量值,因此也永远不会改变.
虽然Typescript 通常是100种语言,但enum
是一个例外.它们被设计为nominal或opaque.因此,您不能将它们与字符串值进行比较.
然而,有一些变通办法...
enum MyEnum {
foo = 'FOO',
bar = 'BAR',
}
type StringIsInEnum = 'FOO' extends `${MyEnum}` ? true : false; // true