eslint/constructor-super 正しさ
何を行うか
継承クラスのコンストラクター内では 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