Lint Rules

noUselessConstructor (since vnext)

This rule is recommended by Rome.

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.

Source: https://typescript-eslint.io/rules/no-useless-constructor

Examples

Invalid

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

   This constructor is unnecessary.
  
    1 │ class A {
  > 2 │     constructor (a) {}
       ^^^^^^^^^^^^^^^^^^
    3 │ }
    4 │ 
  
   Safe fix: Remove the unnecessary constructor.
  
    1 1  class A {
    2  - ····constructor·(a)·{}
    3 2  }
    4 3  
  
class B extends A {
    constructor (a) {
        super(a);
    }
}
complexity/noUselessConstructor.js:2:5 lint/complexity/noUselessConstructor  FIXABLE  ━━━━━━━━━━━━━━

   This constructor is unnecessary.
  
    1 │ class B extends A {
  > 2 │     constructor (a) {
       ^^^^^^^^^^^^^^^^^
  > 3 │         super(a);
  > 4 │     }
       ^
    5 │ }
    6 │ 
  
   Safe 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 () {}
}
complexity/noUselessConstructor.js:5:5 lint/complexity/noUselessConstructor  FIXABLE  ━━━━━━━━━━━━━━

   This constructor is unnecessary.
  
    3 │      * Documented constructor.
    4 │      */
  > 5 │     constructor () {}
       ^^^^^^^^^^^^^^^^^
    6 │ }
    7 │ 
  
   Suggested fix: Remove the unnecessary constructor.
  
    1 1  class C {
    2  - ····/**
    3  - ·····*·Documented·constructor.
    4  - ·····*/
    5  - ····constructor·()·{}
    6 2  }
    7 3  
  

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