Skip to content
← Back to rules

eslint/constructor-super 正しさ

This rule is turned on by default.

何を行うか

継承クラスのコンストラクター内では super() の呼び出しを必須とし、非継承クラスのコンストラクター内での super() 呼び出しを禁止します。

このルールは TypeScript コードにおいて無効化できます。なぜなら TypeScript コンパイラがこのチェックを強制するからです。

なぜ問題なのか

JavaScript では、継承クラス(別のクラスを拡張するクラス)のコンストラクター内で super() を呼び出すことが必要です。これを実行しなければ、実行時(ランタイム)に ReferenceError が発生します。逆に、非継承クラスで super() を呼び出すことは構文エラーです。

このルールに対して 不正 なコードの例:

js
// super() の呼び出しが欠けている
class A extends B {
    constructor() { }
}

// 非継承クラスでの super()
class A {
    constructor() {
        super();
    }
}

// super() が一部のコードパスでのみ呼び出されている
class C extends D {
    constructor() {
        if (condition) {
            super();
        }
    }
}

このルールに対して 正しい コードの例:

js
// 継承クラスでの適切な super() 呼び出し
class A extends B {
  constructor() {
    super();
  }
}

// 非継承クラスでの super() の呼び出しなし
class A {
  constructor() {}
}

// すべてのコードパスで super() が呼び出されている
class C extends D {
  constructor() {
    if (condition) {
      super();
    } else {
      super();
    }
  }
}

使い方

設定ファイルまたは CLI でこのルールを 有効化 するには、次のように使用できます:

json
{
  "rules": {
    "constructor-super": "error"
  }
}
bash
oxlint --deny constructor-super

参考情報