Webentwicklung: Der neue TypeScript-Compiler in Go

TypeScript wurde einst aus der Not geboren, um die größten Schwächen von JavaScript auszugleichen. Seit Jahren ist es nun ein nahezu unverzichtbares Werkzeug in der Webentwicklung, das in seiner Entwicklung auf Feature-Ebene immer einen leichten Vorsprung zu JavaScript besitzt. Anzeige Microsoft hat kürzlich angekündigt, die Basis von TypeScript vollständig zu überarbeiten – also den Compiler, der TypeScript in JavaScript übersetzt, und weitere Komponenten, die für die Interaktion mit Tools und Entwicklungsumgebungen verantwortlich sind. Dabei hat Microsoft eine für viele überraschende Wahl getroffen. Die meisten haben damit gerechnet, dass, wenn jemand diesen Schritt geht, Rust als Programmiersprache zum Einsatz kommt, denn es gibt bereits populäre Rust-basierte Werkzeuge im JavaScript-Umfeld, etwa den Bundler Rspack. Sebastian Springer Sebastian Springer weckt als Dozent für JavaScript, Sprecher auf zahlreichen Konferenzen und Autor die Begeisterung für professionelle Entwicklung mit JavaScript. Doch das TypeScript-Team mit Anders Hejlsberg als Lead Architect hat sich stattdessen für eine Reimplementierung in der Sprache Go entschieden. Das Ziel der nativen Implementierung in Go, die kompiliert wird – im Gegensatz zur Just-in-Time-Umwandlung der Skriptsprache TypeScript in Bytecode – ist eine Verbesserung der Ausführungszeit der TypeScript-Werkzeuge sowie eine spürbare Reduzierung des Arbeitsspeicherverbrauchs. Laut aktueller Benchmarks erzielt das neue TypeScript eine zehnfach schnellere Zeit beim Build verschiedener Projekte. Dieser Artikel widmet sich den Fragen, warum diese Verbesserung so wichtig ist, wo die aktuellen Schwächen von TypeScript liegen und wie die Entwicklung des neuen Compilers, der unter dem Codenamen Corsa und unter der Version TypeScript 7 geführt wird, vonstatten geht. Was ist TypeScript? Im Jahr 2012 veröffentlichte Microsoft eine erste Version von TypeScript nach zwei Jahren Entwicklungszeit. Seit 2014 wird die Programmiersprache auf GitHub öffentlich einsehbar weiterentwickelt und unterliegt als Open-Source-Projekt der Apache-2.0-Lizenz. Mittlerweise hat TypeScript die Version 5.8 erreicht. Anzeige Im Kern ist TypeScript eine Programmiersprache, die JavaScript um Typsicherheit zur Kompilierungszeit ergänzt – mit den Zielen, besser größere Applikationen entwickeln zu können und eine Grundlage für bessere Entwicklungswerkzeuge zu schaffen. Es gibt eine ganze Reihe von Gründen, die für den Einsatz von TypeScript statt JavaScript sowohl in Frontend- als auch in Backend-Projekten im Web sprechen: Statische Typisierung: JavaScript verfügt nur über ein schwaches Typsystem, das Laufzeitfehler begünstigt. Mit seiner weitestgehend optionalen statischen Typisierung bietet TypeScript einerseits große Flexibilität und hilft Entwicklerinnen und Entwicklern auf der anderen Seite dabei, potenzielle Fehler frühzeitig zu erkennen. Verbesserung der Codequalität: Gerade an Schnittstellen von Modulen in einer Applikation, aber auch bei Bibliotheken, erlaubt TypeScript eine strikte Definition von Schnittstellen, was die Wartbarkeit und Lesbarkeit des Codes deutlich verbessert. Das kommt vor allem größeren Projekten und wiederverwendbaren Bibliotheken zugute. Werkzeugunterstützung: Zahlreiche Werkzeuge im JavaScript-Ökosystem setzen auf TypeScript, um Entwicklern eine bessere Hilfestellung zu leisten. So können Entwicklungsumgebungen wie Visual Studio Code bei der Entwicklung einer Node.js-Applikation deutlich besser helfen, wenn die Typdefinitionen von Node.js installiert sind, insbesondere in Bezug auf die Autovervollständigung von Code und die Anzeige von Funktionssignaturen. Polyfills: TypeScript unterstützt moderne Features aus dem ECMAScript-Standard sehr früh und noch bevor die meisten Umgebungen wie Browser die Features flächendeckend integrieren. TypeScript kann verschiedene ECMAScript-Versionen als Ausgabe zu erzeugen und unterstützt damit auch ältere Umgebungen. Diese Möglichkeit reicht zurück bis zur Version ECMAScript 3 (diese Version des JavaScript-Standards wurde im Jahr 1999 veröffentlicht). Strukturierte Entwicklung: Zusätzlich zum Standard-JavaScript und der Typsicherheit führt TypeScript weitere Konstrukte wie Interfaces, Enums und Generics ein, die es erlauben, Datenstrukturen und Schnittstellen besser zu modellieren. Einige objektorientierte Designpatterns sind in nativem JavaScript nicht oder nur mit zusätzlichem Aufwand umsetzbar. Das Vorhandensein von Interfaces erleichtert hier die Arbeit erheblich. Strikte Umgebung: TypeScript ermöglicht es über Konfigurationsoptionen wie strictNullChecks , häufig auftretende Fehler von vornherein zu vermeiden. , häufig auftretende Fehler von vornherein zu vermeiden. Framework- und Bibliotheksintegration: Viele Frameworks und Bibliotheken im JavaScript-Ökosystem sind entweder direkt in TypeScript umgesetzt oder bringen zumindest Typdefinitionen mit, sodass sie sich nahtlos in eine TypeScript-Umgebung integrieren und alle Vorteile ausspielen können. Was bemerkenswert ist: TypeScript ist (noch) vollständig in TypeScript programmiert. Der Kern der Programmiersprache wird auch in Version 6 noch in TypeScript weitergeführt. Parallel dazu arbeitet das Team an Version 7, die dann die Go-Variante sein und die TypeScript-Implementierung ablösen wird, sobald die beiden Projekte eine Feature-Gleichheit erreicht haben. Der aktuelle Zeitplan des Entwicklungsteams sieht für Mitte des Jahres 2025 eine vollwertige Version des Kommandozeilen-Compilers vor, der in der Lage ist, die Typüberprüfung und Übersetzung von Quellcode durchzuführen. Momentan funktioniert der TypeScript-Go-Compiler bereits nahezu vollständig für reinen TypeScript-Code. Was noch fehlt, ist die Unterstützung von JavaScript, JSDoc und JSX. Ende des Jahres 2025 wird eine Feature-vollständige Version erwartet, die Projekte bauen kann. Außerdem soll mit dem Language Service eines der wichtigsten Entwicklungsfeatures verfügbar sein. Warum aber ist ein so drastischer Schritt wie ein Rewrite in einer anderen Programmiersprache überhaupt erforderlich? TypeScript spielt seine Vorteile vor allem in größeren Applikationen aus. Mit wachsender Codebasis wächst jedoch auch der Ressourcenbedarf von TypeScript beim Type Checking und beim Build. Das führt zum einen dazu, dass das Öffnen eines Projekts in der Entwicklungsumgebung lange dauert, da der Code hier durch den Language Service initial verarbeitet wird. Und auch der Build einer größeren Applikation kann sehr zeitintensiv werden. Zur reinen Laufzeit kommt noch ein weiteres, sogar noch größeres Problem durch den hohen Bedarf an Arbeitsspeicher. Dieser kann zu Speicherproblemen und im schlimmsten Fall zu Abstürzen durch Out-of-Memory-Fehlern führen.