最近,我遇到一个问题,最终我使用了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';遮盖了本机类。
有两件事帮助我们发现了这些问题:
  • 每当我们有意使用本机JavaScript类型时,我们都会在其前面加上技术上无用的,但在视觉上显而易见的window范围:new window.Set()
  • 由于这是一个React项目,因此我们在所有组件上都使用了prop-typesreact-immutable-proptypes。但是,永远不要使用PropTypes.object,该规则几乎总是正确的!
  • 关于javascript - 区分JavaScript集和不可变集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63388887/

    10-16 21:07