ESLint提示将let改为const时如何保留变量可修改特性
报错原因
ESLint的prefer-const规则校验逻辑为:变量声明完成后,只要不存在重新赋值的操作,就必须使用const声明,和变量是否在声明时同步初始化无关。
当前代码中isChecked虽然是先声明、后单独赋值,但赋值操作完成后从未被修改,因此触发规则报错,导致husky提交钩子拦截。
修复方法
如果是当前代码这种变量未被重新赋值的场景,直接运行ESLint的--fix自动修复命令即可自动修正代码,不需要手动调整。优先使用符合lint规范的写法,无特殊需求不要绕过规则校验。
- 方案一:合并声明与赋值语句,使用
const声明变量
这是最推荐的写法,const可以明确标识变量不会被重新赋值,降低代码阅读成本,优化后代码如下:
export class CheckboxConfigureComponent { @Input() selectedProperty: DateRowConfigDto | LabelRowConfigDto | EnumRowConfigDto @Output() filterEvent = new EventEmitter<boolean>() constructor() { } updateFilter(): void { const isChecked = Boolean(this.selectedProperty.visible) this.filterEvent.emit(isChecked) } }
你也可以保留原有的三元表达式this.selectedProperty.visible ? true : false,和Boolean()转换、!!转换的效果完全一致,都能通过校验。
- 方案二:如果后续逻辑确实需要重新修改
isChecked的值,可临时绕过规则
如果当前代码只是未写完,后续确实存在对isChecked重新赋值的逻辑,可以在变量声明行上方添加规则豁免注释,避免校验拦截:
updateFilter(): void { // eslint-disable-next-line prefer-const let isChecked: boolean; isChecked = this.selectedProperty.visible ? true : false // 后续可新增isChecked重新赋值的逻辑 this.filterEvent.emit(isChecked) }
提示:如果没有明确的重新赋值需求,不要随意添加豁免注释,会破坏lint规则的约束意义。
内容的提问来源于stack exchange,提问作者Artamiel
相关产品推荐
相关产品推荐

