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