如果我有枚举:
enum MyEnum {
foo = 'FOO',
bar = 'BAR',
}
const 字符串确认测试的结果如下:
type StringIsInEnum = 'FOO' extends MyEnum ? true : false; // false
有人可以解释为什么在这种情况下,
'FOO'
不扩展MyEnum
吗?
MyEnum.foo
在运行时永远不会改变,并且'FOO'
是一个常数值,因此也永远不会改变。
虽然 TypeScript 通常是一种结构性语言,但
enum
有一点例外。它们被设计为“标称”或“不透明”。因此,您无法将它们与字符串值进行比较。
但是,有解决方法...
enum MyEnum {
foo = 'FOO',
bar = 'BAR',
}
type StringIsInEnum = 'FOO' extends `${MyEnum}` ? true : false; // true
TypeScript 游乐场