最近,我遇到一个问题,最终我使用了JavaScript Set对象,而没有使用new
运算符实例化。我在项目中使用了不可变的,并且期望从那里使用Set
构造,但是我忘了导入它。
不出所料,代码崩溃了,因为代码期望我写let set = new Set()
而不是let set = Set()
。
是否有任何可用的es-lint规则可以帮助解决此类问题?
最佳答案
您可以添加自定义的无限制全局规则:
"no-restricted-globals": [
"error",
{
"name": "Set",
"message": "Use window.Set or add an eslint-ignore if native Set is what you want"
},
{
"name": "Map",
"message": "Use window.Map or add an eslint-ignore if native Map is what you want"
}
],
我们的项目在开始时就很少使用ImmutableJS,因此最终遇到了许多此类问题。最糟糕的情况之一是有人将代码从一个文件迁移到另一个文件,并且同时使用了JavaScript Set和Immutable Set。突然,未经修改的代码开始失败,因为import { Set } from 'immutable';
遮盖了本机类。有两件事帮助我们发现了这些问题:
window
范围:new window.Set()
关于javascript - 区分JavaScript集和不可变集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63388887/