src/content/docs/linter/rules/no-useless-constructor.mdx
import { Tabs, TabItem } from '@astrojs/starlight/components';
<Tabs> <TabItem label="JavaScript (and super languages)" icon="seti:javascript"> ## Summary - Rule available since: `v1.0.0` - Diagnostic Category: [`lint/complexity/noUselessConstructor`](/reference/diagnostics#diagnostic-category) - This rule is **recommended**, meaning it is enabled by default. - This rule has an [**unsafe**](/linter/#unsafe-fixes) fix. - The default severity of this rule is [**information**](/reference/diagnostics#information). - Sources: - Same as [`no-useless-constructor`](https://eslint.org/docs/latest/rules/no-useless-constructor) - Same as [`@typescript-eslint/no-useless-constructor`](https://typescript-eslint.io/rules/no-useless-constructor){
"linter": {
"rules": {
"complexity": {
"noUselessConstructor": "error"
}
}
}
}
Disallow unnecessary constructors.
ES2015 provides a default class constructor if one is not specified. As such, providing an empty constructor or one that delegates into its parent is unnecessary.
The rule ignores:
private and protected constructors.This rule reports on constructors whose sole purpose is to make a parent constructor public. See the last invalid example.
class A {
constructor (a) {}
}
class B extends A {
constructor (a) {
super(a);
}
}
class C {
/**
* Documented constructor.
*/
constructor () {}
}
class A {
protected constructor() {
this.prop = 1;
}
}
class B extends A {
// Make the parent constructor public.
constructor () {
super();
}
}
class A {
constructor (prop) {
this.prop = prop;
}
}
class B extends A {
constructor () {
super(5);
}
}
class C {
// Empty constructor with parameter properties are allowed.
constructor (private prop: number) {}
}
class D {
constructor(public arg: number){}
}
class F extends D {
// constructor with default parameters are allowed.
constructor(arg = 4) {
super(arg)
}
}
@Decorator
class C {
constructor (prop: number) {}
}