Skip to main content

consistent-generic-constructors

Enforce specifying generic type arguments on type annotation or constructor name of a constructor call.

🎨

ESLint 配置 中扩展"plugin:@typescript-eslint/stylistic" 可启用此规则。

🔧

此规则报告的一些问题可通过 --fix ESLint 命令行选项自动修复


构造泛型类时,你可以在左侧(作为类型注释)或右侧(作为构造函数调用的一部分)指定类型参数:

英:When constructing a generic class, you can specify the type arguments on either the left-hand side (as a type annotation) or the right-hand side (as part of the constructor call):

// Left-hand side
const map: Map<string, number> = new Map();

// Right-hand side
const map = new Map<string, number>();

此规则确保类型参数一致地出现在声明的一侧。 保持在一侧可以持续提高代码的可读性。

英:This rule ensures that type arguments appear consistently on one side of the declaration. Keeping to one side consistently improve code readability.

该规则从不报告声明两侧或两侧都没有类型参数的情况。 如果类型注释和构造函数的名称不匹配,它也不会报告。

.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/consistent-generic-constructors": "error"
}
};
在线运行试试这个规则 ↗

选项

  • constructor(默认): 不允许出现在类型注释上的 only 类型参数。
  • type-annotation: 不允许在构造函数中出现 only 的类型参数。

constructor

const map: Map<string, number> = new Map();
const set: Set<string> = new Set();
Open in Playground

type-annotation

const map = new Map<string, number>();
const set = new Set<string>();
Open in Playground

何时不使用它

如果你不想强制使用一种通用构造函数样式而不是另一种,则可以关闭此规则。

英:You can turn this rule off if you don't want to enforce one kind of generic constructor style over the other.

但是,请记住,不一致的风格可能会损害项目的可读性。 我们建议为此规则选择一个最适合你的项目的选项。

英:However, keep in mind that inconsistent style can harm readability in a project. We recommend picking a single option for this rule that works best for your project.

选项

该规则接受以下选项

type Options = ['constructor' | 'type-annotation'];

const defaultOptions: Options = ['constructor'];

资源