ESLint:为什么会出现Symbol未定义的情况(no-undef规则)?

5
在我最近设置的Typescript项目中,我已经让Babel编译我的Typescript代码。 我还使用@typescript-eslint作为我的代码检查器。 到目前为止,一切都很顺利,直到最近我尝试在我的代码中使用Symbol时出现了问题。 由于某种原因,Typescript(或Babel)无法识别Symbol,并给出了一个错误,指出Symbol未定义。
这是我的eslintrc文件的样子:
{
  "parser": "@typescript-eslint/parser",
  "extends": [
    "eslint:recommended",
    "plugin:@typescript-eslint/recommended",
    "prettier/@typescript-eslint",
    "plugin:prettier/recommended"
  ],
  "parserOptions": {
      "ecmaVersion": 2018,
      "sourceType": "module"
  },
  "plugins": [
      "@typescript-eslint/eslint-plugin"
  ]
}

而在我的babelrc中,我有以下内容:

{
  "presets": [
    [
      "@babel/preset-env"
    ],
    ["@babel/preset-typescript"]
  ],
  "plugins": [
    "@babel/plugin-transform-modules-commonjs",
    [
      "@babel/plugin-transform-runtime",
      {
        "corejs": 2
      }
    ]
  ]
}

为什么会发生这种情况,我应该如何解决这个问题?

1
你能否添加你的配置堆栈,特别是eslint和babel。因为你的帖子缺少很多信息。 - Stefano Mtangoo
当您将配置转换为此处定义的最小配置https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin时会发生什么? - Stefano Mtangoo
@StefanoMtangoo 同意。我刚试图从我的配置中删除extends部分,但是Symbol仍然无法被识别。 - Carven
我建议您在 typescript-eslint 上开一个问题,并链接此问题,以便那里更懂的人可以帮助您。 - Stefano Mtangoo
@Carven,很高兴我的回答有所帮助!如果您不介意的话:我更新了问题标题,以更好地反映您最初的问题,因为TypeScript并不是这里的问题。 - ford04
显示剩余7条评论
1个回答

17
如果您在 "parserOptions" 下设置"ecmaVersion": 2018,则 ESLint 仅支持 ES2018 语法。对于 ES6 全局变量(如Symbol),您需要指定env(如果未指定,则启用支持 ES6 语法的自动功能):

.eslintrc.json:

{ "env": { "es6": true } }

请看他们的文档

同样,支持ES6语法不等于支持新的ES6全局变量(例如Set等新类型)。对于ES6语法,请使用{"parserOptions": {"ecmaVersion": 6}};对于新的ES6全局变量,请使用{"env": {"es6": true}}{"env": {"es6": true}}会自动启用ES6语法,但是{"parserOptions": {"ecmaVersion": 6}}不会自动启用ES6全局变量。


这对于像ErrorOptionsNodeListOf这样的接口无效。 - Yukulélé

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接