diff --git a/packages/eslint-plugin/src/rules/unified-signatures.ts b/packages/eslint-plugin/src/rules/unified-signatures.ts index b387450801f..3b5f2294762 100644 --- a/packages/eslint-plugin/src/rules/unified-signatures.ts +++ b/packages/eslint-plugin/src/rules/unified-signatures.ts @@ -213,7 +213,8 @@ export default util.createRule({ b.typeParameters !== undefined ? b.typeParameters.params : undefined; if (ignoreDifferentlyNamedParameters) { - for (let i = 0; i < a.params.length; i += 1) { + const commonParamsLength = Math.min(a.params.length, b.params.length); + for (let i = 0; i < commonParamsLength; i += 1) { if ( a.params[i].type === b.params[i].type && getStaticParameterName(a.params[i]) !== diff --git a/packages/eslint-plugin/tests/rules/unified-signatures.test.ts b/packages/eslint-plugin/tests/rules/unified-signatures.test.ts index 73f773dc42d..ce62f6c571c 100644 --- a/packages/eslint-plugin/tests/rules/unified-signatures.test.ts +++ b/packages/eslint-plugin/tests/rules/unified-signatures.test.ts @@ -177,6 +177,28 @@ function f(v: number, u?: string): void {} }, { code: ` +function f(v: boolean): number; +function f(): string; + `, + options: [{ ignoreDifferentlyNamedParameters: true }], + }, + { + code: ` +function f(v: boolean, u: boolean): number; +function f(v: boolean): string; + `, + options: [{ ignoreDifferentlyNamedParameters: true }], + }, + { + code: ` +function f(v: number, u?: string): void {} +function f(v: number): void; +function f(): string; + `, + options: [{ ignoreDifferentlyNamedParameters: true }], + }, + { + code: ` function f(a: boolean, ...c: number[]): void; function f(a: boolean, ...d: string[]): void; function f(a: boolean, ...c: (number | string)[]): void {}