13. Juli 2026

Migration zu TypeScript 7: 4× schnellere Builds

TypeScript 7 ist die native Portierung des TypeScript-Compilers nach Go. Gleiche Sprache, gleiche Semantik, aber ein Compiler, der nicht mehr auf Node.js läuft. Microsoft verspricht Build-Beschleunigungen von „bis zu 10×". Wir haben das Legistry-Backend (rund 1.400 TypeScript-Dateien) migriert und gemessen, was tatsächlich ankommt: 4× schnellere Clean Builds.

Build-Performance messen

Build-Benchmarks sind simpel, solange man bei jedem Durchlauf einen Clean Build erzwingt und den Median mehrerer Läufe nimmt. Der erste Lauf ist wegen kalter Caches meist langsamer:

for i in 1 2 3 4 5; do
  rm -rf backend/dist
  /usr/bin/time -p node_modules/.bin/tsc -p backend
done

Einmal auf TypeScript 6 laufen lassen, aktualisieren, noch einmal laufen lassen:

npm install --ignore-scripts --save-dev --workspace backend typescript@7

Unsere Ergebnisse, Median mehrerer Clean Builds auf einem Apple M1 Pro (16 GB RAM):

BuildTypeScript 6.0.3TypeScript 7.0.2Speedup
Backend tsc (Typecheck + Emit)14,3 s3,6 s4,0×

Warum nicht 10×? Die von Microsoft beworbene Zahl stammt von riesigen Projekten, deren Build vom Typechecking dominiert wird. Bei einem mittelgroßen Projekt machen Prozessstart, Declaration Emit und File-I/O einen größeren Anteil aus, und diese Aspekte werden nicht 10× schneller. 4× ist trotzdem eine beeindruckende Verbesserung.

vue-tsc benötigt TypeScript 7.1

vue-tsc steuert den Compiler über die JS-API von TypeScript, und typescript@7 liefert keine mit. Das Vue-Team verfolgt das in vuejs/language-tools#5381: Die API, die vue-tsc braucht, ist für TypeScript 7.1 geplant. Es gibt zwar eine Community-Brücke, aber wir setzen ausschließlich auf offizielle Pakete, also muss das Frontend noch warten.

Bis dahin laufen im Monorepo beide Compiler nebeneinander, allein über die normale npm-Workspace-Auflösung:

// package.json (Root): vue-tsc löst diese Version auf
"devDependencies": { "typescript": "^6.0.3" }

// backend/package.json: landet unter backend/node_modules
"devDependencies": { "typescript": "^7.0.2" }

npm run build --workspace backend nutzt das lokale TypeScript 7, während vue-tsc weiterhin TypeScript 6 im Root auflöst.

Fazit

Die Migration bestand aus einer neuen Zeile package.json und zwei kleinen Korrekturen auf Typ-Ebene. Sobald TypeScript 7.1 die API liefert und vue-tsc sie offiziell unterstützt, folgt das Frontend und der Root-Pin verschwindet. Unser Frontend-Build dürfte dann ähnlich drastisch schrumpfen.