我犯了几次这个错误 - 想知道是否有ESLint或TSLint规则会发现它
if (this.isBrowser && this.imageURL) {.....}
private isBrowser(): boolean{
return isPlatformBrowser(this.platformId);
}
使用this.isBrowser
将始终返回true,因为它是一个函数是真实的。我必须使用get isBrowser() {}
或this.isBrowser()
ESLint或TSLint是否可以检查并警告对函数的调用是否正在写为属性访问器?
答案 0 :(得分:2)
属性getter可以由linters处理的唯一情况是,当它们可能是no-op时,有TSLint / ESLint no-unused-expression
rule:
this.isBrowser; // causes linter error
Chai断言就是这种情况。在任何其他情况下,this.isBrowser
都不是无操作。
if (this.isBrowser)
是检查isBrowser
成员是否真实的有效代码段。它可能对方法if (this.isBrowser) this.isBrowser()
有效。
使用TypeScript解决此问题的一种方法是不要对条件
保持懒惰if (this.isBrowser === true && this.imageURL) {.....}
如果isBrowser
是函数,则会导致类型错误。
这是一个可能由不确定的代码样式引起的问题。如果检查它是否是浏览器的方法被称为isBrowser
,那么如何调用布尔属性?方法和属性可能混淆且不能共存的事实表明返回布尔值的方法可能具有不同的名称,例如, getIsBrowser
,而isBrowser
保留为布尔值。