💡Warum TypeScript?
TypeScript ergänzt JavaScript um ein Typsystem, das zur Entwicklungszeit prüft und zur Laufzeit verschwindet. Dieses Kapitel zeigt, was der Compiler findet, was im JavaScript übrig bleibt und wie man TypeScript übersetzt und ausführt.
🐞Typfehler zur Entwicklungszeit
// JavaScript: läuft – und liefert Unsinn function brutto(netto, satz) { return netto * (1 + satz); } brutto("100", 0.19); // 119 (Glück: * wandelt um) brutto(100); // NaN (satz fehlt) const kunde = { name: "Ada" }; kunde.nmae.toUpperCase(); // TypeError – erst zur Laufzeit!
Zwei der drei Probleme fallen nie auf (falsches Ergebnis statt Fehler), das dritte erst beim Kunden.
🧽Type Erasure: Was bleibt, was verschwindet?
: number hinter Parametern und Rückgabe wird ersatzlos gestrichen.as ist keine Umwandlung, sondern eine Behauptung.⚙️tsc – der Compiler
npm install --save-dev typescript npx tsc --init # legt tsconfig.json an npx tsc # übersetzt nach outDir npx tsc --noEmit # nur prüfen (CI, Pre-Commit) npx tsc --watch # bei Änderungen neu übersetzen
src/
├── index.ts ─┐
└── util.ts ──┤ ┌───────┐ dist/
├────▶ │ tsc │ ──▶ ├── index.js + index.d.ts
tsconfig.json ┘ └───┬───┘ └── util.js + util.d.ts
│
▼
Fehler (TS2322 …) – Ausgabe entsteht trotzdem,
außer mit "noEmitOnError": true🧾tsconfig.json – die wichtigsten Optionen
Sammelschalter u. a. für noImplicitAny, strictNullChecks, strictFunctionTypes, strictPropertyInitialization, useUnknownInCatchVariables. Einzelne Prüfungen lassen sich danach gezielt wieder abschalten.
TypeScript 6.0: Seit TypeScript 6.0 standardmäßig true.
🛡️strict: der wichtigste Schalter
🎯target: welches JavaScript entsteht
Bei ES2015 schreibt der Compiler ?? und ?. in Vergleiche mitnull/void 0 um, ** inMath.pow und async in eine Hilfsfunktion __awaiter mit Generatoren. Ab ES2022 bleibt alles, wie es ist – Klassenfelder eingeschlossen.
▶️Ausführen: tsc, Node.js, tsx, Bundler
| Werkzeug | prüft Typen? | schreibt Dateien? | wofür |
|---|---|---|---|
| tsc | ✅ ja | ✅ .js, .d.ts, .map | Typprüfung (tsc --noEmit in CI) und Bibliotheken bauen |
| node datei.ts | ❌ nein | – (führt direkt aus) | Skripte und Server mit „löschbarer“ Syntax; Type Stripping seit Node.js 22.18 / 23.6 standardmäßig an, stabil seit 24.12 / 25.2 |
| tsx | ❌ nein | – (führt direkt aus) | Ausführen per esbuild, auch mit enum & Co. (npx tsx datei.ts) |
| Bundler (Vite, esbuild, SWC, webpack …) | ❌ nein | ✅ gebündeltes JS | Web-Apps: entfernen Typen Datei für Datei, blitzschnell – die Prüfung macht parallel tsc bzw. der Editor |
Node.js: Type Stripping
Aktuelle Node.js-Versionen führen .ts-Dateien direkt aus, indem sie die Typen durch Leerzeichen ersetzen. Laut Dokumentation (Node.js v26) gilt dabei:
- nur löschbare Syntax – kein
enum, keinnamespacemit Code, keine Parameter-Properties, keine Decorators; - Typ-Importe brauchen
import type; - Dateiendungen in Importen sind Pflicht (
./datei.ts); tsconfig.jsonwird ignoriert (keinpaths, kein Downleveling);- empfohlen:
"erasableSyntaxOnly": true– dann meldet schon der Compiler, was Node nicht kann (rechts).
Quelle: nodejs.org/api/typescript.html ↗