microsoft / microsoft/TypeScript
Performance regression for declaration emit of an oversized inferred type
ใพใ ่ชฐใ็ๆใใฆใใพใใใ
- ไธป่ฆ่จ่ช
- Go
- ในใฟใผ
- 111k
- ใใฉใผใฏ
- 14.3k
- ๅนณๅใใผใธ
- 2ๆฅ 4ๆ้
- ใใผใธๆธใฟ PR๏ผ30ๆฅ๏ผ
- 132
่ชฌๆ
๐ Search Terms
TS7056 memory, declaration emit OOM, "inferred type of this node exceeds the maximum length", DeepCloneNode serializedTypes, NodeBuilder declaration emit memory, typescript-go TS7056 RSS
๐ Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about declaration emit and large inferred types
- Reproduced on 7.1.0-dev (
main,./built/local/tsc) vs TypeScript 6.0.3 (./node_modules/typescript/bin/tsc). Both report the same TS7056 and emit no.d.ts. The Go compiler uses ~6ร the memory and is 5.8x slower.
โโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโ
โ version โ peak RSS โ wall โ result โ
โโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโผโโโโโโโโโโโโโโโโโโโค
โ 5.9.3 โ 0.51 GB โ 0.97 s โ TS7056, no .d.ts โ
โโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโผโโโโโโโโโโโโโโโโโโโค
โ 6.0.3 โ 0.41 GB โ 0.66 s โ TS7056, no .d.ts โ
โโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโผโโโโโโโโโโโโโโโโโโโค
โ 7.0.0-dev.20260707.2 โ 2.38 GB โ 3.68 s โ TS7056, no .d.ts โ
โโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโผโโโโโโโโโโโโโโโโโโโค
โ 7.0.1-rc โ 2.25 GB โ 3.51 s โ TS7056, no .d.ts โ
โโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโผโโโโโโโโโโโโโโโโโโโค
โ 7.0.2 โ 2.25 GB โ 3.49 s โ TS7056, no .d.ts โ
โโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโผโโโโโโโโโโโโโโโโโโโค
โ main 7.1.0-dev โ 2.42 GB โ 3.41 s โ TS7056, no .d.ts โ
โโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโดโโโโโโโโโโโโโโโโโโโ
โฏ Playground Link
N/A
๐ป Code
let x0 = { v: 1 };
let x1 = { a: x0, b: x0, c: x0 };
let x2 = { a: x1, b: x1, c: x1 };
let x3 = { a: x2, b: x2, c: x2 };
let x4 = { a: x3, b: x3, c: x3 };
let x5 = { a: x4, b: x4, c: x4 };
let x6 = { a: x5, b: x5, c: x5 };
let x7 = { a: x6, b: x6, c: x6 };
let x8 = { a: x7, b: x7, c: x7 };
let x9 = { a: x8, b: x8, c: x8 };
let x10 = { a: x9, b: x9, c: x9 };
let x11 = { a: x10, b: x10, c: x10 };
let x12 = { a: x11, b: x11, c: x11 };
let x13 = { a: x12, b: x12, c: x12 };
export const y = x13;
/usr/bin/time -l tsc --declaration repro.ts
๐ Actual behavior
Both compilers:
repro.ts(15,14): error TS7056: The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed.
Measured on macOS with /usr/bin/time -l:
| compiler | peak RSS | wall |
|---|---|---|
Go tsc 7.1.0-dev |
2.48 GB | 3.5 s |
JS tsc 6.0.3 |
0.41 GB | 0.6 s |
In a limited environment, or with a larger repro, this will cause the process to OOM.
๐ Expected behavior
Go tsc should report the same TS7056 error without using extra memory and being slower.
Additional information about the issue
Disclosure: This memory issue was found with a differential memory harness (Go tsc vs JS tsc 6.0.3) and AI assistance (Kimi K3). Verified by hand against TypeScript 7.1.0-dev (main) and TypeScript 6.0.3.
ใณใณใใชใใฅใผใทใงใณใฌใคใ
ใณใณใใชใใฅใผใทใงใณใฌใคใใ้ใ
ใฏใใใฎไธๆญฉ
- issue ใๆๅพใพใง่ชญใฟใๆฌกใซใใญใธใงใฏใใฎใณใณใใชใใฅใผใทใงใณใฌใคใใ่ชญใฟใพใใ
- ็ๆใใใใจใ issue ใซใณใกใณใใใพใ โ ไบไบบใๅใไฝๆฅญใใใใฎใ้ฒใใพใใ
- ใชใใธใใชใใใฉใผใฏใใใใฉใณใใๅใฃใฆๅคๆดใใพใใ
- issue ็ชๅทใๅ็ งใใใใซใชใฏใจในใใ้ใใพใใ
่ชฟๆปใฎๆนๅๆง
ใพใใๆไพใใใ repro.ts ใ declaration emit ใงๅฎ่กใใ็คบใใใฆใใ time ใณใใณใใไฝฟใฃใฆ Go tsc ใจ JavaScript ใณใณใใคใฉใผใๆฏ่ผใใพใใๆฌกใซใNodeBuilderใserializedTypesใDeepCloneNode ๅจ่พบใฎ declaration-emit ใในใ่ชฟในใพใใGo ใณใณใใคใฉใผใๅผใ็ถใ TS7056 ใๅ ฑๅใใคใคใๅ ฑๅใใใฆใใ่ฟฝๅ ใฎใกใขใชไฝฟ็จ้ใจ้ๅบฆไฝไธใๅ้ฟใงใใใฐๅฎไบใงใใ
็ดขๅผใขใใซใ issue ใฎๆฌๆใใๆธใใใใฎใงใใ
่ฉไพก
- ๆ่กในใฟใใฏ
- go, typescript
- ้ ๅ
- compilers, performance
- issue ใฎ็จฎ้ก
- ใใฐ
- ้ฃๆๅบฆ
- 4/5
- ่ฆ็ฉใใๆ้
- 3ใ5ๆฅ
- ๆดป็บใ
- ๆดป็บ
- ๆ็ญใ
- ใใใใญๆ็ขบ
- ๅๅฟ่ ใธใฎใใใใ
- 48/100