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
- Ngôn ngữ chính
- Go
- Star
- 111k
- Fork
- 14.3k
- Merge trung bình
- 2 ngày 4 giờ
- Pull request đã merge (30 ngày)
- 132
Mô tả
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
```
Hướng dẫn đóng góp
Hướng nghiên cứu
Bắt đầu với các lần chạy A/B đã được báo cáo của tsconfig.typecheck.json và tsconfig.passthrough.json, so sánh --showConfig, --listFiles và các chẩn đoán thô cho các cấu hình trực tiếp và pass-through. Kiểm tra biến thể include được liệt kê rõ ràng và các issue Type Ordering liên quan #1605, #2830 và #1278. Được xem là hoàn tất khi xác định và sửa được sự khác biệt về chẩn đoán phụ thuộc vào cấu hình, đồng thời vẫn giữ nguyên cùng một chương trình và các chẩn đoán dự kiến.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- go, react, typescript
- Lĩnh vực
- compilers
- Loại issue
- Lỗi
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức độ hoạt động
- Ít trao đổi
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100