首页 > 解决方案 > TSLint ESLint - 当函数作为属性访问时发出警告?

问题描述

我犯了几次这个错误 - 想知道是否有 ESLint 或 TSLint 规则可以发现它

if (this.isBrowser && this.imageURL) {.....}

private isBrowser(): boolean{
    return isPlatformBrowser(this.platformId);
}

usingthis.isBrowser将始终返回 true,因为它是一个函数的事实是真实的。我要么必须使用get isBrowser() {},要么this.isBrowser()

ESLint 或 TSLint 是否可以检查并警告对函数的调用正在编写为属性访问器?

标签: javascripttypescripteslinttslint

解决方案


属性 getter 可以由 linter 处理的唯一情况是当它们可能是无操作时,有 TSLint/ESLintno-unused-expression规则

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保留用于布尔值。


推荐阅读