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.

In Pocket speichern vorlesen Druckansicht
Schreibmaschine, Tastatur, Keyboard, TypeScript, Typewriter

(Bild: erstellt mit KI durch iX)

Lesezeit: 3 Min.

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.

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'.
}

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.

JavaScript-Konferenz von Heise: enterJS 2025
Enterprise-JavaScript-Konferenz enterJS 2025, 7. und 8. Mai in Mannheim

(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:

Tickets sind zum Frühbucherpreis im Online-Shop erhältlich.

(mai)