diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index a8f1c0de383..f38bcb88e1d 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -21632,19 +21632,29 @@ namespace ts { } } else { - const related: DiagnosticRelatedInformation[] = []; + const allDiagnostics: DiagnosticRelatedInformation[][] = []; + let max = 0; + let min = Number.MAX_VALUE; + let minIndex = 0; let i = 0; for (const c of candidatesForArgumentError) { - i++; - const chain = () => chainDiagnosticMessages(/*details*/ undefined, Diagnostics.Overload_0_of_1_2_gave_the_following_error, i, candidates.length, signatureToString(c)); + const chain = () => chainDiagnosticMessages(/*details*/ undefined, Diagnostics.Overload_0_of_1_2_gave_the_following_error, i + 1, candidates.length, signatureToString(c)); const diags = getSignatureApplicabilityError(node, args, c, assignableRelation, CheckMode.Normal, /*reportErrors*/ true, chain); if (diags) { - related.push(...diags); + if (diags.length <= min) { + min = diags.length; + minIndex = i; + } + max = Math.max(max, diags.length); + allDiagnostics.push(diags); } else { Debug.fail("No error for 3 or fewer overload signatures"); } + i++; } + + const related = max > 1 ? allDiagnostics[minIndex] : flatten(allDiagnostics); diagnostics.add(createDiagnosticForNodeFromMessageChain(node, chainDiagnosticMessages(/*details*/ undefined, Diagnostics.No_overload_matches_this_call), related)); } } diff --git a/src/compiler/core.ts b/src/compiler/core.ts index f1511b79c12..896bf7d849c 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -600,6 +600,7 @@ namespace ts { * * @param array The array to flatten. */ + export function flatten(array: T[][]): T[]; export function flatten(array: ReadonlyArray | undefined>): T[]; export function flatten(array: ReadonlyArray | undefined> | undefined): T[] | undefined; export function flatten(array: ReadonlyArray | undefined> | undefined): T[] | undefined { diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 8dbc74c6b12..8d96a91bd82 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -2625,14 +2625,6 @@ "category": "Error", "code": 2755 }, - "The closest overload gave the following error.": { - "category": "Error", - "code": 2756 - }, - "The closest overload is declared here.": { - "category": "Error", - "code": 2757 - }, "The last overload gave the following error.": { "category": "Error", "code": 2758 diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index ae5b60cd864..ae230d75154 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -8092,7 +8092,7 @@ namespace ts { visitDirectory(basePath, combinePaths(currentDirectory, basePath), depth); } - return flatten(results); + return flatten(results); function visitDirectory(path: string, absolutePath: string, depth: number | undefined) { const canonicalPath = toCanonical(realpath(absolutePath)); diff --git a/tests/baselines/reference/heterogeneousArrayAndOverloads.errors.txt b/tests/baselines/reference/heterogeneousArrayAndOverloads.errors.txt index d6ced6a25a1..9750b678e7f 100644 --- a/tests/baselines/reference/heterogeneousArrayAndOverloads.errors.txt +++ b/tests/baselines/reference/heterogeneousArrayAndOverloads.errors.txt @@ -15,11 +15,5 @@ tests/cases/compiler/heterogeneousArrayAndOverloads.ts(9,9): error TS2755: No ov !!! error TS2755: No overload matches this call. !!! related TS2760 tests/cases/compiler/heterogeneousArrayAndOverloads.ts:9:26: Overload 1 of 2, '(arg1: number[]): any', gave the following error. Type 'string' is not assignable to type 'number'. -!!! related TS2760 tests/cases/compiler/heterogeneousArrayAndOverloads.ts:9:20: Overload 2 of 2, '(arg1: string[]): any', gave the following error. - Type 'number' is not assignable to type 'string'. -!!! related TS2760 tests/cases/compiler/heterogeneousArrayAndOverloads.ts:9:23: Overload 2 of 2, '(arg1: string[]): any', gave the following error. - Type 'number' is not assignable to type 'string'. -!!! related TS2760 tests/cases/compiler/heterogeneousArrayAndOverloads.ts:9:32: Overload 2 of 2, '(arg1: string[]): any', gave the following error. - Type 'number' is not assignable to type 'string'. } } \ No newline at end of file