Skip to content
← Back to rules

typescript/no-misused-new Correctness

This rule is turned on by default.

作用

强制 new 和 constructor 的定义有效。该规则可防止类定义名为 new 的方法,防止接口定义名为 constructor 的方法,并防止接口定义返回该接口自身的构造签名。

为什么这不好?

JavaScript 类可以定义一个构造函数方法,当类实例被新建时会运行该方法。

TypeScript 允许描述静态类对象的接口定义 new() 签名(尽管这在实际代码中很少使用)。该构造签名应返回构造出的实例类型,而不是构造函数对象本身的接口。 对于刚接触 JavaScript 类和/或 TypeScript 接口的开发者来说,可能有时会混淆何时使用 constructor 或 new。

示例

以下是此规则的错误代码示例:

typescript
declare class C {
  new(): C;
}
typescript
interface I {
  new (): I;
}
typescript
interface I {
  constructor(): void;
}

以下是此规则的正确代码示例:

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

interface I {
  new (): C;
}

如何使用

To enable this rule using the config file or in the CLI, you can use:

json
{
  "rules": {
    "typescript/no-misused-new": "error"
  }
}
ts
import { defineConfig } from "oxlint";

export default defineConfig({
  rules: {
    "typescript/no-misused-new": "error",
  },
});
bash
oxlint --deny typescript/no-misused-new

版本

此规则于 v0.0.7 中添加。

参考资料