统一签名
禁止两个可以合并为一个的重载,可以使用联合类型或可选/剩余参数。
🔒
在 "plugin:@typescript-eslint/strict"
的 ESLint 配置 中扩展此规则。
函数重载签名是 TypeScript 中定义一个函数可以在多种不同方式调用的方法。重载签名会增加语法和理论上的复杂性,因此在可能的情况下最好避免使用它们。切换到联合类型和/或可选或剩余参数通常可以避免使用重载签名。
此规则报告何时可以将函数重载签名替换为单个函数签名。
.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/unified-signatures": "error"
}
};
在 playground 中尝试此规则 ↗
示例
- ❌ 错误
- ✅ 正确
function x(x: number): void;
function x(x: string): void;
在 Playground 中打开function y(): void;
function y(...x: number[]): void;
在 Playground 中打开function x(x: number | string): void;
在 Playground 中打开function y(...x: number[]): void;
在 Playground 中打开// This rule won't check overload signatures with different rest parameter types.
// See https://github.com/microsoft/TypeScript/issues/5077
function f(...a: number[]): void;
function f(...a: string[]): void;
在 Playground 中打开选项
此规则接受以下选项
type Options = [
{
/** Whether two parameters with different names at the same index should be considered different even if their types are the same. */
ignoreDifferentlyNamedParameters?: boolean;
},
];
const defaultOptions: Options = [{ ignoreDifferentlyNamedParameters: false }];
ignoreDifferentlyNamedParameters
使用ignoreDifferentlyNamedParameters
的代码示例
- ❌ 错误
- ✅ 正确
function f(a: number): void;
function f(a: string): void;
在 Playground 中打开function f(a: number): void;
function f(b: string): void;
在 Playground 中打开何时不使用它
这纯粹是一个风格规则,有助于提高函数签名重载的可读性。如果你不想始终将它们放在一起并统一,可以关闭它。