TypeScript 3.7 RC ist da. Wie bisher soll sich zwischen Release Candidate und dem finalen Release nichts ändern, abgesehen von kritischen Bugfixes. Daniel Rosenwasser, Program Manager bei TypeScript, stellte die wichtigsten Features in einem Blogeintrag vor.
Der RC kann via NuGet, per npm-Befehl npm install typescript@rc
oder in Visual Studio 2017/2019 bezogen werden. Daneben kann er auch in VS Code oder Sublime Text genutzt werden.
Optional Chaining
Optional Chaining erlaubt das Schreiben von Code, der das Ausführen mancher Ausdrücke sofort stoppt, wenn null
oder undefined
auftritt. Das Feature steht hoch im Kurs: Auf GitHub hat das TC39 Proposal 4.400 Sterne erreicht. Es befindet sich bei ECMAScript in Stage 3, woran nach eigener Aussage auch das TypeScript-Team stark beteiligt war. Mit dem Release Candidate wird das Feature nun in TypeScript 3.7 implementiert. Besonders der Operator ?.
steht dabei im Rampenlicht, den Daniel Rosenwasser am folgenden Beispiel zeigt:
let x = foo?.bar.baz();
Hiermit wird ausgedrückt, dass foo.bar.baz()
berechnet wird, wenn foo
definiert ist. Ist foo
jedoch null
oder undefined
, wird die Ausführung gestoppt und undefined
ausgegeben.
Das obige Code-Snippet sei mit diesem gleichzusetzen:
let x = (foo === null || foo === undefined) ? undefined : foo.bar.baz();
Wenn bar
entweder null oder undefined
ist, wird der Code weiterhin beim Aufruf von baz
einen Error erzeugen. Ist baz
entweder null
oder undefined
, tritt ebenfalls ein Error auf. ?.
prüft also nur, ob der links davon liegende Wert null
oder undefined
ist, jedoch nicht die nachfolgenden Eigenschaften. Es sollte zudem beachtet werden, dass sich ?.
nicht identisch zu &&
-Operationen verhält, an deren Stelle es voraussichtlich oft eingesetzt werden wird.
Erfahren Sie eine strukturierte und nachvollziehbare Einführung in Angular. Alle Konzepte und Hintergründe leicht online erklärt! Durchdringen Sie alle Konzepte von Angular. Lernen Sie mehr über Fallstricke, Missverständnisse und bewusste Einschränkungen. Als Online-Training oder vor-Ort in Düsseldorf!
Basic Camp für Einsteiger
Neu: Deep-Dive für Fortgeschrittene
Weitere Features und Breaking Changes
Im neuen Release Candidate für TypeScript 3.7 gibt es erweiterten Support für Funktionen, die never
ausgeben, sodass ein return
nach Failure Functions nicht mehr nötig ist.
Als Beispiel dafür wurde zunächst die bisherige Methode gezeigt:
function dispatch(x: string | number): SomeType { if (typeof x === "string") { return doThingWithString(x); } else if (typeof x === "number") { return doThingWithNumber(x); } return process.exit(1); }
Und anschließend die neue Methode in TypeScript 3.7 RC:
function dispatch(x: string | number): SomeType { if (typeof x === "string") { return doThingWithString(x); } else if (typeof x === "number") { return doThingWithNumber(x); } process.exit(1); }
Daneben hat ein weiteres angehendes ECMAScript-Feature im RC Einzug gehalten: der Nullish Coalescing Operator, der mit Optional Chaining einhergeht. Auch Assertion Signatures zum Modellieren von Assertion Functions sowie zusätzliche rekursive Alias Types sind neu.
Zu den Breaking Changes zählt ein Update der Typen lib.dom.d.ts sowie eine Error-Ausgabe, wenn Funktionen innerhalb von If-Statement-Bedingungen scheinbar nicht aufgerufen werden. Auch wurde ein bisher bestehender Bug behoben, was jetzt dazu führt, dass lokale und importierte Typendeklarationen einen Konflikt erzeugen.
Alle weiteren Details zu TypeScript 3.7 Release Candidate bietet Daniel Rosenwasser im Blogeintrag.