no-unsafe-declaration-merging
安全でない宣言のマージを禁止します。
✅
拡張 "plugin:@typescript-eslint/recommended"
を ESLint 設定 で有効にすると、このルールが有効になります。
TypeScript の「宣言のマージ」は、同じ名前の別々の宣言のマージをサポートしています。
クラスとインターフェース間の宣言のマージは安全ではありません。TypeScriptコンパイラーは、プロパティが初期化されているかどうかを確認しないため、ランタイムエラーを引き起こすコードをTypeScriptが検出できない可能性があります。
interface Foo {
nums: number[];
}
class Foo {}
const foo = new Foo();
foo.nums.push(1); // Runtime Error: Cannot read properties of undefined.
.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/no-unsafe-declaration-merging": "error"
}
};
プレイグラウンドでこのルールを試す ↗
例
- ❌ 不正
- ✅ 正しい
interface Foo {}
class Foo {}
プレイグラウンドで開くinterface Foo {}
class Bar implements Foo {}
namespace Baz {}
namespace Baz {}
enum Baz {}
namespace Qux {}
function Qux() {}
プレイグラウンドで開くオプション
このルールは設定できません。
使用しない場合
プロジェクトで安全でない宣言マージパターンを使用して意図的にクラスとインターフェースを定義している場合、このルールは適切ではない可能性があります。このルールを完全に無効にするのではなく、特定の状況に対してESLint disable コメントを使用することを検討してください。