javascript - 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 是否可以检查并警告对函数的调用正在编写为属性访问器?
解决方案
属性 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
保留用于布尔值。
推荐阅读
- java - 如何使循环条件“当字符串不等于”
- javascript - 我无法从终端使用 npm 运行我的 React JS 应用程序,因为命令 spawn 失败并出现错误 ENOENT
- ios - 为什么它要求我提供 Y 位置或高度?我该如何解决?
- python - 将 VR 镜头失真(桶形失真)应用于实时视频馈送
- java - 复选框以启用各自的文本字段并从每个字段中的用户获取输入值
- java - 为什么我无法在 Eclipse Maven 项目中将类导入 java 文件?
- msys2 - 如何在 MSYS2 上安装 libpng?
- android - 学习原生 Android 和 Flutter 哪个更难?
- python - 如何在 django 中以一对多关系链编写选择查询?
- javascript - 赛普拉斯测试在本地是绿色的,但在 CI 中失败 - 调试提示?