【发布时间】:2015-01-27 11:53:44
【问题描述】:
我正在使用 ReSharper 9 及其 TypeScript 功能。我正在写打字稿代码。我有一个这样的界面:
interface Test {
A?: boolean;
...
}
然后我像这样写一个if 语句,以测试成员A 是否存在并且完全等于false。 (又名:如果它不存在,我想把它当作真的。)
if (myObj.A === false) {
...
}
然后 ReSharper 给了我一个提示:Comparison to False is equivalent to negating value,如果我接受修复,它就变成了
if (!myObj.A) {
...
}
这显然是不等价的,因为例如如果没有定义 A 则为真。
我错过了什么?在运行时真的等效吗?
【问题讨论】:
-
不确定 Javascript/Typescript 如何处理它,但在 C# 中,
!myObj.A在语法上是不正确的,因为它不能隐式转换类型 'bool?'到“布尔”。 -
@PiersMyers 我明白你的意思,但情况完全不同。
-
我觉得你的分析是对的。 !myObj.A 的行为与 myObj.A === false 不同。我认为 ReSharper 是错误的。
-
这似乎仍然是一个问题。我想将布尔字段用作可为空的布尔值,但如果我精确比较真假,resharper 会一直抱怨。我想我会关掉那个警告。
标签: javascript visual-studio-2013 typescript resharper