TypeScript 5.8 verbessert die Interoperabilität zwischen CommonJS und ECMAScript
Das neue Release erlaubt den Aufruf von CommonJS-Modulen aus ECMAScript heraus und bringt eine detailliertere PrĂĽfung von Return-AusdrĂĽcken.

(Bild: erstellt mit KI durch iX)
Microsoft hat TypeScript 5.8 veröffentlicht. Die neue Version der Programmiersprache bringt eine verbesserte Interoperabilität von CommonJS-Modulen mit den neueren ECMAScript-Modulen, was Library-Entwicklerinnen und -Entwicklern die Arbeit vereinfachen soll, sowie granulare Prüfungen für Branches in Return-Ausdrücken. Jedoch sind nicht alle Features aus der Beta-Phase in das finale Release eingezogen.
Branches in Return-AusdrĂĽcken auf dem PrĂĽfstand
Wie das Entwicklungsteam ausführt, verschiebt es eine Änderung in Bezug auf das Prüfen von Funktionen mit konditionalen Return-Typen, die noch in der Beta enthalten war, auf das nächste TypeScript-Release. Allerdings gingen aus dieser Arbeit granulare Prüfungen für Branches innerhalb von Return-Ausdrücken hervor, die es in das aktuelle Release 5.8 geschafft haben.
Anhand eines Beispiels zeigt das TypeScript-Team, was es mit dem neuen Feature auf sich hat. Der folgende Code dient dazu, ein URL-Objekt aus einem Cache zu beziehen, falls es existiert, oder ein neues URL-Objekt zu erstellen, falls es noch nicht existiert. Der Code besitzt jedoch den Bug, dass das Erstellen eines neuen URL-Objekts im Input fehlt. Bislang konnte TypeScript diese Art von Fehler nicht erkennen. Das ändert sich nun mit der Version 5.8, die jeden Branch des konditionalen Ausdrucks gegen den deklarierten Return-Typ der enthaltenen Funktionen prüft, sofern vorhanden.
Vor TypeScript 5.8 wurde der Fehler im Code nicht erkannt:
declare const untypedCache: Map<any, any>;
function getUrlObject(urlString: string): URL {
return untypedCache.has(urlString) ?
untypedCache.get(urlString) :
urlString;
}
TypeScript 5.8 gibt dagegen eine Fehlermeldung aus:
declare const untypedCache: Map<any, any>;
function getUrlObject(urlString: string): URL {
return untypedCache.has(urlString) ?
untypedCache.get(urlString) :
urlString;
// ~~~~~~~~~
// error! Type 'string' is not assignable to type 'URL'.
}
Verbessertes Zusammenspiel von CommonJS und ECMAScript
Node.js kann seit Jahren mit ECMAScript-Modulen neben CommonJS-Modulen umgehen, doch das hatte einige TĂĽcken: So konnten ECMAScript-Dateien den import
von CommonJS-Dateien unterstĂĽtzen, doch ein require
von CommonJS-Dateien auf ECMAScript-Dateien war nicht möglich. Das bedeutet, der Umgang mit CommonJS-Dateien aus ECMAScript-Dateien heraus war möglich, der umgekehrte Fall jedoch nicht.
Library-Autorinnen und -Autoren, die ECMAScript verwenden wollten, mussten daher entweder die Kompatibilität mit CommonJS brechen oder auf ein "Dual-Publish" ihrer Libraries zurückgreifen, was laut dem TypeScript-Team ein komplexer und fehleranfälliger Prozess ist, der die Menge an Code innerhalb eines Pakets etwa verdoppelt.
Seit Node.js 22 ist ein Aufruf von require("esm")
von CommonJS-Modulen zu ECMAScipt-Modulen möglich. Dabei ist zu beachten, dass ein require()
zu ECMAScript-Dateien, die ein Top-Level-await
enthalten, weiterhin nicht zulässig ist. TypeScript kann mit diesem neuen Verhalten mithilfe des Flags --module nodenext
umgehen, um Developern die verbesserte Interoperabilität zur Verfügung zu stellen. Weitere Informationen hierzu sind im Pull Request auf GitHub zu finden.
Alle weiteren Details zu TypeScript 5.8 lassen sich einem Blogeintrag entnehmen. Wie es mit der nächsten Version TypeScript 5.9 weitergeht, können Interessierte im Issue Tracker mitverfolgen. Dort sollen bald konkrete Zieltermine und weitere Details zu finden sein. Nightly Builds für einen frühen Einblick in Version 5.9 lassen sich via npm (npm install typescript@next
) oder Visual-Studio-Code-Erweiterung installieren.
(Bild: WD Ashari/Shutterstock.com)
Die enterJS 2025 findet am 7. und 8. Mai in Mannheim statt. Die Konferenz bietet einen umfassenden Blick auf die JavaScript-gestĂĽtzte Enterprise-Welt. Der Fokus liegt nicht nur auf den Programmiersprachen JavaScript und TypeScript selbst, sondern auch auf Frameworks und Tools, Accessibility, Praxisberichten, UI/UX und Security.
Highlights aus dem Programm:
- TypeScript – eine Anleitung zum Unglücklichsein
- 4 kritische Antipatterns in der React/TypeScript-Entwicklung
- Von der Vision zum Code: Functional Domain Modeling mit TypeScript (Workshop, 6. Mai)
Tickets sind zum Frühbucherpreis im Online-Shop erhältlich.
(mai)