单次声明的全局变量触发ESLint no-redeclare报错的原因及解决方法
报错原因
no-redeclare 规则的默认校验逻辑包含两类场景:
- 同一作用域下代码内多次声明同一个变量
- 自定义全局变量与ESLint预定义的内置全局变量重名
你碰到的报错属于第二类:ESLint会根据你配置的env字段(例如browser、es2022、node等)自动加载对应运行环境的预定义全局变量列表,AS正好属于你已开启环境的内置全局变量范畴,因此哪怕你在代码中仅声明一次,也会被判定为和内置全局重复触发报错。
无需行内禁用注释的解决方案
- 方案1:全局关闭内置全局变量的重名校验
如果可以接受所有自定义全局都不与内置全局做重名校验,仅保留代码内部重复声明的校验能力,直接修改.eslintrc的rules配置即可,这是官方推荐的标准解法:
{ "rules": { "no-redeclare": ["error", { "builtinGlobals": false }] } }
- 方案2:仅放行
AS单个变量的重名冲突
如果不想全局关闭内置全局重名校验,只需要单独处理AS这个变量,可以升级到ESLint v8+版本,高版本ESLint会优先识别.eslintrc中自定义的globals配置,自动忽略同名的内置全局变量冲突,无需额外修改规则配置。
内容的提问来源于stack exchange,提问作者Brian Zelip
相关产品推荐
相关产品推荐

