no-unsafe-declaration-merging
Disallow unsafe declaration merging.
✅
Extending "plugin:@typescript-eslint/recommended"
in an ESLint configuration enables this rule.
TypeScript's "declaration merging" supports merging separate declarations with the same name.
Declaration merging between classes and interfaces is unsafe. The TypeScript compiler doesn't check whether properties are initialized, which can cause lead to TypeScript not detecting code that will cause runtime errors.
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"
}
};
Examples
- ❌ Incorrect
- ✅ Correct
interface Foo {}
class Foo {}
Open in Playgroundinterface Foo {}
class Bar implements Foo {}
namespace Baz {}
namespace Baz {}
enum Baz {}
namespace Qux {}
function Qux() {}
Open in PlaygroundFurther Reading
Options
This rule is not configurable.