Javascript 类声明ECMAScript 6后分号上的ESLint错误

Javascript 类声明ECMAScript 6后分号上的ESLint错误,javascript,ecmascript-6,lint,babeljs,Javascript,Ecmascript 6,Lint,Babeljs,我有以下代码: class Car() { constructor() { // ... } withSemi() { // ... }; // ESLint does not complain here withoutSemi() { // ... } // ESLint does not complain here }; // ESLint will complain about th

我有以下代码:

class Car() {

    constructor() {
        // ...
    }

    withSemi() {
        // ...
    };  // ESLint does not complain here

    withoutSemi() {
       // ...
    }  // ESLint does not complain here

};  // ESLint will complain about this semicolon (no-extra-semi)
有人能解释一下自动分号插入在ES6类中是如何工作的,以及为什么ESLint会有这种行为吗?

根据,分号是有效的
类元素
,因此它可以存在于
类主体

但是,其语义将其视为没有任何行为(例如,请参见)实际上,您可以在
类主体中使用任意多或任意少的分号,而且它不会改变任何事情。

自动分号插入实际上并没有在这里起作用,或者像人们一般认为的那样频繁。粗略地说,ASI仅在解析器看到不允许作为前一个块或行的一部分的内容时发生。(如果您感兴趣,ASI的示例并不太长;向下滚动以获取示例和实用建议。)但是在本文中,您可以按顺序将一组类方法定义放在一起。因此,列表中的下一个方法没有什么“意外”,因此不会在它们之间插入分号


我不知道这个决定的历史,但我假设分号是有效的
ClassElement
s,因为它们已经作为空语句有效了,如果不能在类主体中放分号,人们可能会感到困惑。

据我所知,
的语义类似于
函数
没有分号,即
类名{}
函数名(){}
,因此ESLint的警告是正确的。那么如何解释方法后的分号呢?(ESLint不在乎我是否添加它们)。从我所看到的
方法
没有定义关键字
函数
,类似
函数
不应该结束
。但是像
public numAttacks=0这样的表达式应以
结尾非常类似于您期望javascript在ES6之前编写的方式,您的答案是有道理的,但是通过查看ESLint,我希望它会抱怨类主体中额外的半部分。实际上,查看,它肯定应该捕获类主体中的半部分。您是否在配置中将
ecmaVersion
设置为6或更高?否则ESLint将不会使用
规则。。。