== Why is this an issue?

JavaScript and TypeScript classes may define a `constructor` method that is executed when a new instance is created. TypeScript allows interfaces that describe a static class object to define a `new()` method. Using these terms to name methods in other contexts can lead to confusion and make the code unclear and harder to understand.

This rule reports when:

* A class defines a method named `new`. The `new` keyword is used to create new instances of the class. If a method with the same name is defined, it can be unclear whether the method is intended to create new instances or perform some other action.
* An interface defines a method named `constructor`. The constructor method is used to define the constructor function for a class that implements the interface. If a method with the same name is defined in the interface, it can be unclear whether the method is intended to define the constructor function or perform some other action.


[source,javascript,diff-id=1,diff-type=noncompliant]
----
interface I {
  constructor(): void; // Noncompliant
  new(): I;
}

declare class C {
  constructor();
  new(): C; // Noncompliant
}
----

Do not define methods named `constructor` on TypeScript interfaces. Similarly, avoid defining class methods called `new`.

[source,javascript,diff-id=1,diff-type=compliant]
----
interface I {
  new(): I;
}

declare class C {
  constructor();
}
----

== Resources
=== Documentation

* MDN web docs - https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#interfaces[TypeScript - Interfaces]
* MDN web docs - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes[Classes]
* MDN web docs - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/constructor[`constructor`]
* MDN web docs - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new[`new` operator]
