与 FALSE 的比较等同于取反值。这是 ReSharper 错误吗?

Comparison to FALSE is equivalent to negating value. Is it a ReSharper bug?

我正在使用 ReSharper 9 及其 TypeScript 功能。我正在写打字稿代码。我有一个这样的界面:

interface Test {
  A?: boolean;
  ...
}

然后我写了一个这样的if语句,来测试成员A是否存在并且正好等于false。 (又名:如果它不存在,我想把它当作真的。)

if (myObj.A === false) {
  ...
}

然后 ReSharper 给了我一个关于 Comparison to False is equivalent to negative value 的提示,如果我接受修复,它就变成了

if (!myObj.A) {
  ...
}

这显然不等价,因为如果没有定义 A 则为真。

我错过了什么?它在运行时真的是等价的吗?

如你所说,这两个比较并不等同:

var myObj = {A: false};
myObj.A === false //true;
myObj = {};
myObj.A === false //false;
!myObj.A //true (not what you want)

所以 ReSharper 提出的建议不正确。