Skip to content

noUselessConstructor

¥Summary

¥How to configure

biome.json
{
"linter": {
"rules": {
"complexity": {
"noUselessConstructor": "error"
}
}
}
}

¥Description

禁止不必要的构造函数。

¥Disallow unnecessary constructors.

如果未指定,ES2015 提供默认类构造函数。因此,提供空构造函数或委托给其父级的构造函数是不必要的。

¥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:

  • 装饰类;

    ¥decorated classes;

  • 至少有一个 参数属性 的构造函数;

    ¥constructors with at least one parameter property;

  • privateprotected 构造函数。

    ¥private and protected constructors.

¥Caveat

此规则报告唯一目的是使父构造函数公开的构造函数。参见最后一个无效示例。

¥This rule reports on constructors whose sole purpose is to make a parent constructor public. See the last invalid example.

¥Examples

¥Invalid

class A {
constructor (a) {}
}
code-block.js:2:5 lint/complexity/noUselessConstructor  FIXABLE  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

This constructor is unnecessary.

1 │ class A {
> 2 │ constructor (a) {}
^^^^^^^^^^^^^^^^^^
3 │ }
4 │

Unsafe fix: Remove the unnecessary constructor.

1 1 class A {
2 - ····constructor·(a)·{}
3 2 }
4 3

class B extends A {
constructor (a) {
super(a);
}
}
code-block.ts:2:5 lint/complexity/noUselessConstructor  FIXABLE  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

This constructor is unnecessary.

1 │ class B extends A {
> 2 │ constructor (a) {
^^^^^^^^^^^^^^^^^
> 3 │ super(a);
> 4 │ }
^
5 │ }
6 │

Unsafe fix: Remove the unnecessary constructor.

1 1 class B extends A {
2 - ····constructor·(a)·{
3 - ········super(a);
4 - ····}
5 2 }
6 3

class C {
/**
* Documented constructor.
*/
constructor () {}
}
code-block.js:5:5 lint/complexity/noUselessConstructor  FIXABLE  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

This constructor is unnecessary.

3 │ * Documented constructor.
4 │ */
> 5 │ constructor () {}
^^^^^^^^^^^^^^^^^
6 │ }
7 │

Unsafe fix: Remove the unnecessary constructor.

1 1 class C {
2 - ····/**
3 - ·····*·Documented·constructor.
4 - ·····*/
5 - ····constructor·()·{}
6 2 }
7 3

class A {
protected constructor() {
this.prop = 1;
}
}
class B extends A {
// Make the parent constructor public.
constructor () {
super();
}
}
code-block.ts:9:5 lint/complexity/noUselessConstructor  FIXABLE  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

This constructor is unnecessary.

7 │ class B extends A {
8 │ // Make the parent constructor public.
> 9 │ constructor () {
^^^^^^^^^^^^^^^^
> 10 │ super();
> 11 │ }
^
12 │ }
13 │

Unsafe fix: Remove the unnecessary constructor.

6 6
7 7 class B extends A {
8 - ····//·Make·the·parent·constructor·public.
9 - ····constructor·()·{
10 - ········super();
11 - ····}
12 8 }
13 9

¥Valid

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) {}
}

¥Related links