microsoft / microsoft/TypeScript

TS2742 “The inferred type of 'default' cannot be named” with ESLint `defineConfig`

Offen
#62,558 11 Kommentare 3 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Domain: Declaration Emit Help Wanted Possible Improvement
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.3k
Ø Merge
2 T. 4 Std.
Gemergte PRs (30 T.)
132

Beschreibung

🔎 Search Terms

TS2742, 2742, composite, pnpm

🕗 Version & Regression Information
  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about TS2742
⏯ Playground Link

No response

💻 Code

eslint.config.ts

import { defineConfig } from "@eslint/config-helpers";
export default defineConfig();

node_modules/@eslint/config-helpers/index.d.ts

export type Config = import("@eslint/core").ConfigObject;
export function defineConfig(): Config;

node_modules/@eslint/config-helpers/node_modules/@eslint/core/index.d.ts

export interface ConfigObject {}

tsconfig.json

{
  "compilerOptions": {
    "composite": true
  }
}

(No other files are needed for this test case; there’s nothing else in node_modules.)

🙁 Actual behavior

No error.

🙂 Expected behavior

eslint.config.ts(2,1): error TS2742: The inferred type of 'default' cannot be named without a reference to '@eslint/config-helpers/node_modules/@eslint/core'. This is likely not portable. A type annotation is necessary.

Additional information about the issue

In eslint/rewrite#283 I reported an unexpected error TS2742 when using the defineConfig function from ESLint. I reduced this test case to a clear TypeScript issue, which I’m reporting as requested in https://github.com/microsoft/TypeScript/issues/42873#issuecomment-2065572017.

This change makes the error disappear:

--- a/node_modules/eslint/node_modules/@eslint/config-helpers/index.d.ts
+++ b/node_modules/eslint/node_modules/@eslint/config-helpers/index.d.ts
@@ -1,2 +1,3 @@
-export type Config = import("@eslint/core").ConfigObject;
+import { ConfigObject as Config } from "@eslint/core";
+export { Config };
 export function defineConfig(): Config;

However, in the real @eslint/config-helpers package, the line export type Config = import("@eslint/core").ConfigObject is generated by tsc from JSDoc /** @typedef {import("@eslint/core").ConfigObject} Config */, and there doesn’t seem to be a way to generate an equivalent change from JSDoc.

In any case, such a change shouldn’t be necessary. TypeScript ought to recognize that export type Config = import("@eslint/core").ConfigObject is already sufficient to allow the defineConfig return type to be named.

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Reproduziere den Fall aus eslint.config.ts, node_modules/@eslint/config-helpers/index.d.ts und tsconfig.json mit aktiviertem composite. Untersuche, wie der Compiler den abgeleiteten Standardtyp benennt, wenn er den importierten Config-Alias verwendet; abgeschlossen ist die Aufgabe, wenn das reduzierte Beispiel die erwartete TS2742-Diagnose meldet, ohne dass eine Paketänderung erforderlich ist.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
typescript
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Ruhig
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
48/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.