能否通过ESLint/TSLint检测函数被当作属性访问的错误?
当然可以!不管是ESLint(配合TypeScript插件,这也是目前推荐的方案)还是已经废弃的TSLint,都能检测到你遇到的这种误将函数引用当作属性访问的问题,下面具体说两种工具的解决办法:
ESLint(推荐方案)
ESLint本身没有直接对应规则,但结合@typescript-eslint/eslint-plugin的内置规则就能精准识别这类问题:
- 核心规则:
@typescript-eslint/no-unnecessary-condition
这个规则专门检测逻辑上永远为真或永远为假的条件判断。比如你的代码里,this.isBrowser是一个函数引用——在JavaScript/TypeScript中,函数作为对象永远是真值,所以if (this.isBrowser)这种判断完全没有意义,规则会直接抛出警告,间接帮你发现“忘记调用函数”的问题。
配置示例
在你的ESLint配置文件(比如.eslintrc.js)中启用该规则:
module.exports = { parser: '@typescript-eslint/parser', plugins: ['@typescript-eslint'], rules: { '@typescript-eslint/no-unnecessary-condition': 'warn' // 可以设为'error'强制修复 } };
当你运行ESLint检查时,它会针对你的示例代码抛出类似这样的警告:
Unnecessary condition: 'this.isBrowser' is always truthy
这会直接提醒你这里的写法有问题,需要改成this.isBrowser()或者将isBrowser改为getter属性。
TSLint(已废弃,仅作兼容参考)
如果你还在维护使用TSLint的旧项目,它也有对应的规则:
- 核心规则:
no-unnecessary-condition
功能和ESLint的同名规则一致,会标记永远为真/假的条件判断。在tslint.json中配置:
{ "rules": { "no-unnecessary-condition": true } }
额外提示
如果你的场景更特殊,需要直接检测“访问函数类型的属性却没有调用”,也可以考虑自定义ESLint/TSLint规则,但绝大多数情况下,上述内置规则已经足够覆盖你的需求——毕竟误把函数当属性用的直接后果就是条件永远为真,刚好触发规则的检测逻辑。
内容的提问来源于stack exchange,提问作者Drenai
相关产品推荐
相关产品推荐

