eslint 7 说支持 ES2020 了,怎么还报错呢?

王顶
  • 1.2k
  • ES2020 支持类的私有属性,示例代码如下:
// calc.js
class Rectangle {
  #w = 0;
  #h = 0;

  constructor(width, height) {
    this.#w = Number(width);
    this.#h = Number(height);
  }
  
  get area() {
    return this.#w * this.#h;
  }

  get perimeter() {
    return 2 * (this.#w + this.#h);
  }
}
  • 命令行执行 npm install eslint,看到安装的 eslint 版本是 7.28
  • 搞一个 .eslintrc.json 配置文件如下:
{
  "parserOptions": {
    "ecmaVersion": 11
  },
  "env": {
    "browser": true,
    "jquery": true
  },
  "extends": "eslint:recommended",
  "rules": {
    "indent": [
      "error",
      2,
      {
        "SwitchCase": 1,
        "VariableDeclarator": {"var": 2, "let": 2, "const": 3}
      }
    ],
    "linebreak-style": [
      "error",
      "unix"
    ],
    "quotes": [
      "error",
      "single"
    ],
    "semi": [
      "error",
      "always"
    ],
    "no-console": [
      "error",
      { "allow": ["error"] }
    ]
  }
}
  • 执行命令 npx eslint calc.js,结果报错如下:
/home/wangding/rep/rectangle/calc.js
  3:3  error  Parsing error: Unexpected character '#'

✖ 1 problem (1 error, 0 warnings)

这个怎么解决啊?

回复
阅读 93
1 个回答

首先,Private Class Fields 这一特性目前仍是草案,虽有部分浏览器支持了,但并非 ES 标准。

所谓的 ES2020 支持,其实是指它在制订 ES2020 期间被提出,但争议很大(甚至你能看到一些 TC39 成员呼吁要废止 proposal-class-fields),到目前尚处于 stage-3 阶段(即 Candidate 阶段),尚有变动的较大可能。

其次,ESlint 本身只支持 stage-4 阶段的特性(即 Finished 阶段)。

最后,ESlint 官方会推荐你使用 babel-eslint,以支持更多的实验性特性。


【附】ES 草案各阶段:

  • stage-0/Strawperson:潜在的可能被纳入规范的一些想法。
  • stage-1/Proposal:为该想法设想一些适用场景、可能的用例,提出解决实现方案以及可能的变更。
  • stage-2/Draft:经过上一步验证讨论后,这一阶段开始起草语言层面的语义语法,准备正式的规范文档。
  • stage-3/Candidate:提案进入到了候选阶段。开始接收一些反馈对提案进行完善。
  • stage-4/Finished:可以被纳入到正式的 ECMAScript 语言规范中了。

https://stackoverflow.com/que...
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏