在 TypeScript 中,我想比较两个包含枚举值的变量。这是我的最小代码示例:
enum E {
A,
B
}
let e1: E = E.A
let e2: E = E.B
if (e1 === e2) {
console.log("equal")
}
使用 tsc
(v 2.0.3) 编译时出现以下错误:
TS2365:运算符“===”不能应用于类型“EA”和“E.B”。
与 ==
、 !==
和 !=
。我尝试添加 const
关键字,但这似乎没有效果。 TypeScript 规范 说明了以下内容:
4.19.3 <、>、<=、>=、==、!=、=== 和 !== 运算符
这些运算符要求一种或两种操作数类型可分配给另一种。结果总是布尔原始类型。
哪个(我认为)解释了错误。但是我怎样才能绕过它呢?
边注
我正在使用带有 atom-typescript 的 Atom 编辑器,并且在我的编辑器中没有收到任何错误/警告。但是当我在同一目录中运行 tsc
时,我得到了上面的错误。我以为他们应该使用相同的 tsconfig.json
文件,但显然情况并非如此。
原文由 John J. Camilleri 发布,翻译遵循 CC BY-SA 4.0 许可协议
还有另一种方法:如果您不希望生成的 javascript 代码受到任何影响,您可以使用类型转换:
通常,这是由基于控制流的类型推断引起的。使用当前的打字稿实现,只要涉及函数调用,它就会关闭,因此您也可以这样做:
奇怪的是,如果
id
函数被声明为返回与其参数完全相同的类型,仍然没有错误: