Web & Entwicklung

TypeScript

TypeScript ist JavaScript mit Typprüfung. Es verlangt, den Datentyp von Werten festzulegen, und meldet Widersprüche bereits beim Schreiben statt beim Ausführen.

Redaktionell geprüft von Alexander SeidlertwentyonepixelsStand:

Was das im Projekt ändert

Eine ganze Fehlerklasse verschwindet vor dem Start: Zugriffe auf Felder, die es nicht gibt, falsch übergebene Werte, vergessene Fälle. Solche Fehler treten sonst erst beim Nutzer auf, und meist im selteneren Zweig.

Der zweite Gewinn ist Lesbarkeit. Aus der Signatur einer Funktion geht hervor, was sie erwartet und liefert — was Einarbeitung und Übergaben spürbar verkürzt.

Was es im Projektalltag spart

Vor allem Rückfragen. Wenn eine Funktion angibt, was sie erwartet und zurückgibt, muss man nicht nachlesen oder nachfragen — und die Entwicklungsumgebung schlägt das Richtige vor. Der Gewinn wächst mit der Größe des Projekts und mit der Zahl der Beteiligten.

Der zweite Gewinn zeigt sich beim Umbau: Wer ein Feld umbenennt, bekommt sofort alle Stellen genannt, die es benutzen. Ohne Typen findet man sie durch Suchen und übersieht welche.

Was es nicht leistet

Es prüft nur, was zusammenpasst, nicht ob es richtig ist. Eine Berechnung, die zwei Zahlen falsch verrechnet, ist typkorrekt und trotzdem falsch. Tests ersetzt die Typprüfung nicht.

Und sie endet an der Systemgrenze: Daten aus einer Schnittstelle sind zur Laufzeit, was der Server schickt — nicht, was der Typ behauptet. Dort braucht es eine echte Prüfung der Werte, und genau dort stürzen typisierte Projekte trotzdem ab.

Häufige Fragen zu TypeScript

Zwei Angaben liegen vor, und sie widersprechen sich um den Faktor zweieinhalb. Gao, Bird und Barr annotierten für die begutachtete ICSE-Studie 2017 fehlerhafte JavaScript-Änderungen nachträglich und fanden, dass TypeScript rund 15 Prozent der Fehler gemeldet hätte. Airbnb nannte in einem Konferenzvortrag 38 Prozent aus sechs Monaten eigener Störungsberichte – eine Selbstauskunft, keine begutachtete Messung. Beide Zahlen haben dieselbe Kehrseite: Die Mehrheit der Fehler bleibt unentdeckt.

Der strict-Modus ist kein einzelner Schalter, sondern eine Sammeloption: Die amtliche Konfigurationsreferenz führt neun Einzelflags in der strict-Familie, darunter noImplicitAny, strictNullChecks und strictPropertyInitialization. Ohne strictNullChecks gehören null und undefined zu jedem Typ – die Prüfung fällt dort weitgehend aus. Die Dokumentation warnt zugleich, dass künftige Versionen unter demselben Flag weitere Prüfungen aufnehmen können. Ein Versionssprung kann deshalb neue Fehler melden, ohne dass sich eine Zeile Code geändert hat.

Nicht die strengste Einstellung am ersten Tag setzen. Bei einem gewachsenen Projekt meldet der Compiler dann auf einen Schlag hunderte Fehler, die sich keinem einzelnen Arbeitsschritt mehr zuordnen lassen. Tragfähiger ist die Reihenfolge: erst den Mischbetrieb erlauben, damit alte und neue Dateien nebeneinander laufen, dann implizite Typen verbieten, jeden Fehler beheben, sichern – und die Null-Prüfung zuletzt, weil dieses Flag den meisten Code berührt. Jede Stufe bleibt einzeln prüfbar und einzeln umkehrbar.

Nichts – die Typen sind vorher verschwunden. Der Compiler entfernt Annotationen, Schnittstellen und Typaliase beim Übersetzen; im ausgelieferten JavaScript steht keine Zeile davon. Die erklärten Entwurfsziele führen das ausdrücklich als Nichtziel: keine Typinformation zur Laufzeit und kein abweichender Code aufgrund der Typprüfung. Praktisch heißt das zweierlei: Eine Schnittstelle lässt sich zur Laufzeit nicht abfragen, und die ausgelieferte Datei wird durch noch so viele Typen kein Byte größer.

Der Typ any hebt die Prüfung für diesen Wert auf, und zwar auch für alles, was daraus abgeleitet wird – der Compiler schweigt ab dieser Stelle. Das Flag noImplicitAny aus der strict-Familie greift nur bei den stillen Fällen, nicht bei einem hingeschriebenen any. Wer einen Wert wirklich nicht kennt, nimmt unknown: Damit erzwingt TypeScript eine Prüfung, bevor der Wert benutzt werden darf. Aus demselben Grund setzt useUnknownInCatchVariables Fehlerobjekte auf unknown.

Microsoft hat den Compiler nach Go portiert und die Messwerte im März 2025 veröffentlicht: Das Projekt hinter Visual Studio Code mit 1.505.000 Zeilen brauchte mit dem bisherigen Compiler 77,8 Sekunden, mit dem nativen 7,5 – Faktor 10,4. Die Ladezeit des Projekts im Editor fiel von 9,6 auf 1,2 Sekunden. Der Punkt bleibt derselbe: TypeScript prüft in einem eigenen Schritt, den reines JavaScript gar nicht kennt.

Mehr zum Thema

8 Min. Lesezeit

Alte Fachanwendung läuft nicht unter Windows 11 – was tun

Viele Betriebe halten Windows 10 nur wegen einer einzigen Branchensoftware am Leben. Welche Wege es gibt – ESU, virtuelle Maschine, Terminalserver oder Ablösung als Web-Anwendung – und wann welcher trägt.

9 Min. Lesezeit

Passkeys einbauen: Login ohne Passwort im Kundenportal

Passkeys lassen sich nicht abfischen, weil sie an die Domain gebunden sind. Was der Einbau in ein Kundenportal verlangt, wo die eigentliche Schwachstelle liegt und wann ein Passwort als Rückfallebene bleiben muss.

Alle Fachbeiträge ansehen

Passende Leistungen

React & Next.js Entwicklung

Performante Webanwendungen mit Server-Side Rendering und TypeScript — von der Firmenwebsite bis zur komplexen Plattform.

Mehr dazu

Laravel & Vue.js Entwicklung

Individuelle Webanwendungen mit Laravel-Backend und Vue.js-Frontend — REST-APIs, Echtzeit-Features und robuste Datenbank-Architektur.

Mehr dazu