javascript - 区分 JavaScript Set 和不可变 Set

标签 javascript eslint immutable.js

我最近遇到了一个问题,我最终使用了 JavaScript Set 对象,但没有使用 new 运算符进行实例化。我在我的项目中使用了不可变,并期望从那里使用 Set 构造,但我忘了导入它。

正如预期的那样,代码崩溃了,因为代码希望我编写 let set = new Set() 而不仅仅是 let set = Set()

是否有任何可用的 es-lint 规则可以帮助捕获此类问题?

最佳答案

您可以添加自定义的 no-restricted-globals 规则:

"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'; 隐藏了 native 类。

有两件事帮助我们发现了这些问题:

  • 每当我们有意使用原生 JavaScript 类型时,我们都会在它们前面加上技术上无用但视觉上明显的 window 范围:new window.Set()
  • 由于它是一个 React 项目,我们使用了 prop-typesreact-immutable-proptypes在所有组件上。不过永远不要使用 PropTypes.object,这条规则几乎总是正确的!

关于javascript - 区分 JavaScript Set 和不可变 Set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63388887/

相关文章:

javascript - eslint "indent"规则的第一个参数是什么

immutable.js - 获取 OrderedMap 的子集/过滤器

javascript - 检查数组是否不为空 - XHR 响应测试

javascript - 在nodejs中使用mssql(插入行的函数)

javascript 对象字面量,将同一字面量内的对象值组合在一起

javascript - jquery 元素,声明为变量

javascript - Ember-Template-Lint 如何修复 hbs 文件中的 block 缩进错误?

javascript - 为什么用于导入订单的 Eslint 插件在 CRA 中不起作用?

javascript - 我可以使用相同的代码遍历 immutable.List、immutable.Set 或 Javascript Array 或 Set 吗?

reactjs - 如何使用 Redux 文档中解释的这个高阶组件?