craco+TS项目配置ESLint后报@typescript-eslint/no-unused-expressions错误问询
问题原因
- 仅关闭了
@typescript-eslint/no-unused-expressions规则,但ESLint原生的no-unused-expressions规则仍处于开启状态,该规则不识别TypeScript可选链语法,会把?.开头的函数调用误判为未使用的无效表达式 - ESLint配置修改后未清除缓存,旧校验规则持续生效
- 旧版本的
@typescript-eslint/eslint-plugin对可选链调用的判断存在缺陷,即使关闭对应规则也可能偶发报错
可行解决方案
方案1:完整关闭相关规则(最快捷)
在
.eslintrc.js的rules字段中同时关闭原生和TS版本的规则:rules: { // 保留原有其他规则,新增以下两行配置 "no-unused-expressions": "off", "@typescript-eslint/no-unused-expressions": "off" }配置修改后删除项目下的
node_modules/.cache目录清除ESLint缓存,重启开发服务即可生效。方案2:保留规则,仅放行可选链调用场景
如果不想完全关闭规则校验,可以配置规则参数允许可选链类表达式:
rules: { "no-unused-expressions": "off", "@typescript-eslint/no-unused-expressions": ["error", { "allowShortCircuit": true, "allowTernary": true, "allowOptionalChain": true // 核心配置,允许可选链表达式 }] }方案3:修改代码规避校验
不想调整ESLint配置的情况下,把可选链写法改为常规空判断即可:
if (this.formRef.current) { this.formRef.current.setFieldsValue({ ...this.props.tenantStore.tenantModel, }); } // resetFields调用部分做相同修改即可方案4:升级依赖修复识别缺陷
若为依赖版本过低导致的语法识别问题,升级相关包到最新稳定版即可:
npm install @typescript-eslint/eslint-plugin@latest @typescript-eslint/parser@latest eslint@latest --save-dev
内容的提问来源于stack exchange,提问作者mtk
相关产品推荐
相关产品推荐

