是否有ESLint规则推荐使用a?.b?.c替代a.b.c避免属性读取报错
满足需求的ESLint规则方案
方案1:适配lodash/get统一规范
直接使用eslint-plugin-lodash插件下的prefer-get规则,完全匹配你的两个要求:
- 可自定义配置检测的嵌套属性访问深度,设置
minimumDepth: 2即可精准扫描所有a.b.c这类≥2层的点属性读取写法 - 触发规则时会直接提示你将对应写法替换为
_.get(a, 'b.c')的安全形式,支持一键自动修复
规则配置示例:
{ "plugins": ["lodash"], "rules": { "lodash/prefer-get": ["error", { "minimumDepth": 2 }] } }
方案2:适配ES6+可选链统一规范
如果团队更倾向用原生?.可选链作为安全读取方案,可搭配以下规则实现需求:
- JS项目:开启ESLint核心规则
prefer-optional-chaining+eslint-plugin-unicorn的no-unsafe-member-access规则 - TS项目:开启
@typescript-eslint/no-unsafe-member-access+prefer-optional-chaining规则
规则会自动检测可能存在访问失败风险的多层属性读取逻辑,提示你修改为a?.b?.c的安全写法。
自定义严格检测方案
如果需要强制限制所有场景下的深层点访问,不管类型是否定义,可使用eslint-plugin-no-nested-dot-access插件,配置最大允许的点访问深度为1,所有超过1层的点访问都会触发提示,要求替换为安全属性读取方式。
内容的提问来源于stack exchange,提问作者icantunderstand
相关产品推荐
相关产品推荐

