TypeScript Native Preview veröffentlicht
(devblogs.microsoft.com)- Die Preview von „tsgo“, dem Projekt Corsa zur Portierung des TypeScript-Compilers als Go-basiertes Native-Binary, wurde über npm veröffentlicht
- Eine Folgeankündigung zu 10x faster TypeScript, das im März für Aufmerksamkeit sorgte
- Gegenüber dem bisherigen
tscwurde eine mehr als 10-fache Geschwindigkeitssteigerung erreicht, außerdem werden JSX sowie JS-Dateien auf Basis von JSDoc unterstützt - Eine Native-Preview-Erweiterung für VS Code wurde ebenfalls veröffentlicht, Autovervollständigung, Referenzen suchen usw. sind jedoch noch in Entwicklung
- Eine neue Native-API und ein LSP-basierter Sprachserver sind ebenfalls in Vorbereitung, zudem wird das Rust-basierte Node-Modul libsyncrpc eingeführt
- Einige Funktionen sind noch nicht implementiert, zudem bestehen klare Unterschiede zwischen TypeScript 7 (Corsa) und dem bisherigen 5.8 (Strada)
Überblick über TypeScript Native Preview
- Die Preview des TypeScript-Native-Portierungsprojekts (Corsa), das im März 2025 angekündigt wurde, ist veröffentlicht worden
- Im Vergleich zur bisherigen JS-basierten Codebasis (Strada) erzielt das in Go geschriebene
tsgodurch Parallelität und die Nutzung gemeinsamen Speichers bei großen Projekten eine mehr als 10-fache Leistungssteigerung tsgosoll künftigtscersetzen, wird derzeit aber noch als separates npm-Paket bereitgestelltnpm install -D @typescript/native-preview npx tsgo --project ./src/tsconfig.json
VS-Code-Erweiterung
-
Veröffentlichung der VS-Code-Erweiterung „TypeScript (Native Preview)“
-
Nach der Installation ist eine Aktivierung über die Befehlspalette oder die Einstellungen erforderlich
"typescript.experimental.useTsgo": true -
Derzeit ist sie noch auf die bestehende Erweiterung angewiesen und funktional eingeschränkt, soll aber kontinuierlich verbessert werden
Release-Zyklus und Entwicklungs-Roadmap
- Diese Preview soll sich künftig zur offiziellen Version von TypeScript 7 weiterentwickeln
- Die Auslieferung erfolgt als Nightly-Build, mit automatischen Updates
- Einige Funktionen werden noch nicht unterstützt:
--build,--declaration, Emit für niedrigere Targets- Editor-Funktionen: Autovervollständigung, Referenzen suchen, Umbenennen usw.
Wichtige Aktualisierungen
Verbesserte Vollständigkeit der Typprüfung
- Die meisten Funktionen der Typprüfung wurden bereits portiert
- JSX sowie JavaScript-Typprüfung mit JSDoc werden nun ebenfalls unterstützt
- Durch einige beabsichtigte Änderungen und Unterschiede bei
lib.d.tskönnen Fehler abweichen
Unterstützung für JSX-Typprüfung
- JSX konnte anfangs nur geparst werden, unterstützt nun aber vollständige Typprüfung
- Beispiel: Im Sentry-Projekt benötigt
tsc72 Sekunden,tsgo6,7 Sekunden, also eine mehr als 10-fache Beschleunigungtsgo -p . --noEmit --extendedDiagnostics
Typprüfung für JavaScript-Dateien
- Auch die Analyse von JS-Dateien auf Basis von JSDoc wurde im Native-Code neu implementiert
- Sie wurde gegenüber dem bisherigen Ansatz auf eine modernere und konsistentere Weise refaktoriert
- Einige ältere Muster werden möglicherweise nicht mehr erkannt
Editor-Funktionen (LSP-basiert)
- Statt des bisherigen TSServer wird ein LSP-basierter Sprachserver neu entwickelt
- In der ersten Version werden Fehleranzeige, Gehe zu Definition und Hover unterstützt
- Kürzlich wurde auch die Funktion Autovervollständigung (completion) hinzugefügt
Stand der API-Entwicklung
- Eine IPC-basierte API-Schicht befindet sich in Implementierung
- Damit können verschiedene Sprachen mit dem TypeScript-Prozess kommunizieren
- Für synchrone Kommunikation in Node.js wird das Rust-basierte Modul libsyncrpc eingeführt
- Das API-Design befindet sich noch in einer frühen Phase, Feedback wird aktiv aufgenommen
Unterschiede zum bisherigen TypeScript
-
Durch einige Konfigurationsunterschiede können in bestehenden Projekten Fehler auftreten:
- Beispiel:
--moduleResolution: node→ empfohlen werdenbundlerodernodenext{ "compilerOptions": { "module": "preserve", "moduleResolution": "bundler" } }
- Beispiel:
-
Weitere Unterschiede:
- JSX-Emit kann nur beibehalten werden
- Declaration-Emit wird nicht unterstützt
--buildwird nicht unterstützt- Sprachdienste für Projekt-Referenzen sind noch unvollständig
Ausblick
- Bis Ende des Jahres sollen
--buildsowie die meisten Kernfunktionen im Editor implementiert werden - Über den Entwicklungsfortschritt soll fortlaufend im Blog und über Nightly-Releases informiert werden
3 Kommentare
Ich nutze die LSP, die ich direkt selbst gebaut habe. Nach dem Wechsel zu Go merkt man sofort deutlich, dass der Ressourcenverbrauch gesunken ist.
Heutzutage ist es in Mode, JavaScript einfach nach Rust / Go zu verlagern, nur um die Performance zu verbessern.
Beim Refactoring kam es ziemlich oft vor, dass das Parsing des Codes auf tsserver-Seite so langsam wurde, dass der Editor komplett eingefroren ist. Hoffentlich erscheint das schnell, damit wir von diesem Leid befreit werden.