microsoft / microsoft/TypeScript

Identical resolved program produces 157 vs 662,155 diagnostics depending on whether the tsconfig is passed directly or through a pass-through extends

Offen
#63,854 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Needs More Info
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.3k
Ø Merge
2 T. 4 Std.
Gemergte PRs (30 T.)
132

Beschreibung

On a large private monorepo package (~12k source files, React + Radix polymorphic component library), `tsgo --noEmit -p tsconfig.typecheck.json --pretty false` produces a stable 157 diagnostics. Creating a second config file in the SAME directory whose entire content is:

```json
{ "extends": "./tsconfig.typecheck.json" }
```

and running `--noEmit -p tsconfig.passthrough.json --pretty false` produces **662,155** diagnostics - 661,006 of them TS2859 "Excessive complexity comparing types" on comparisons as trivial as:

```
error TS2859: Excessive complexity comparing types '"confidential"' and
'"confidential" | "cui" | "internal" | "public" | "restricted" | "secret"'.
```

`--showConfig` for both invocations reports identical compilerOptions and an identical 8,743-file program (the only textual difference is path display relative to each config's location). Both results are stable across repeated runs - deterministic divergence keyed by config indirection, not flakiness.

Additional data points from the same program:

- A third shape - `extends` plus an explicitly enumerated `include` list that resolves to the same file set - produces a THIRD stable result (152 diagnostics), which additionally DROPS 5 real TS2353 errors that the direct run reports.
- Reproduced on `@typescript/native-preview 7.0.0-dev.20260707.2` (there the direct run was the clean-ish one) AND on stable `typescript@7.0.2` (there the DIRECT run explodes to the same 662,155).
- Composition-sensitivity at scale: growing the include set toward the full program flips diagnostic totals between 152 / 645,161 / 648,896 depending on which include units are present; the minimal trigger for the phantom `... is not assignable to type 'never'` class on polymorphic `as`-prop components (`const Component = as || Primitive.div`) is including the package's whole-fleet root barrel.
- tsc 5.9.3 cannot referee whole-program on this package (it dies at the V8 relation-cache Map cap - the motivating case for the native port); bounded subsets of the same files are green under tsc 5.9.3, 6.0.3, preview tsgo, and 7.0.2 alike.

Likely related ("Type Ordering"): microsoft/typescript-go#1605, microsoft/typescript-go#2830, microsoft/typescript-go#1278.

The repo is private, so this report ships observations rather than a runnable repro; happy to run instrumented builds or provide `--listFiles`/`--showConfig`/raw diagnostic captures for the A/B pair on request.

**Repro shape (for any large program):**

```bash
tsc-or-tsgo --noEmit -p tsconfig.json --pretty false | wc -l
printf '{ "extends": "./tsconfig.json" }\n' > tsconfig.passthrough.json
tsc-or-tsgo --noEmit -p tsconfig.passthrough.json --pretty false | wc -l
```

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

Beginnen Sie mit den gemeldeten A/B-Läufen von tsconfig.typecheck.json und tsconfig.passthrough.json und vergleichen Sie --showConfig, --listFiles und die rohen Diagnosen für die direkten und Pass-through-Konfigurationen. Prüfen Sie die ausdrücklich aufgeführte include-Variante und die zugehörigen Type Ordering-Issues #1605, #2830 und #1278. Die Aufgabe ist abgeschlossen, wenn die konfigurationsabhängige Divergenz der Diagnosen identifiziert und behoben wurde, während dasselbe Programm und die erwarteten Diagnosen erhalten bleiben.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
go, react, typescript
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Ruhig
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

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