TypeScript 5.6 lässt manchen Code nicht mehr zu
In der neuen Version der Programmiersprache hat sich einiges getan, was unter anderem den Umgang mit Truthy- und Nullish-PrĂĽfungen betrifft.

(Bild: RossEdwardCairney/Shutterstock.com)
Die neue Programmiersprachenversion TypeScript 5.6 ist erschienen. Microsoft hat dem Superset von JavaScript einige neue Features spendiert, jedoch auch eine Änderung aus der Beta-Phase wieder rückgängig gemacht, die die Suche nach der tsconfig.json-Datei betrifft. Neu sind strengere Nullish- und Truthy-Checks, Iterator-Hilfsmethoden sowie strenge, integrierte Iterator-Checks.
Die Ende Juli erschienene Beta-Version führte eine Änderung in Bezug darauf ein, wie TypeScripts Language Service nach tsconfig.json-Dateien suchte. Der Language Service konnte die Suche nach jeder möglichen Projektdatei namens tsconfig.json fortführen, statt wie bisher bei der ersten zu stoppen. Das konnte allerdings zum Öffnen vieler referenzierter Projekte führen. Daher hat das Entwicklungsteam sich dazu entschieden, dieses Verhalten zunächst rückgängig zu machen und womöglich in veränderter Form in Version 5.7 wieder einzuführen.
Strengere Kontrollen im neuen Release
TypeScript 5.6 führt als Änderung ein, mit strengeren Nullish- und Truthy-Checks bestimmte Ausdrücke nicht mehr zu erlauben. Wie das TypeScript-Team anhand einiger Beispiele ausführt, kann es sich zwar um syntaktisch validen JavaScript-Code handeln, der jedoch nicht das tut, was die Entwicklerin oder der Entwickler im Sinn hatten. TypeScript akzeptierte diese Fälle bisher, doch nun gibt der Compiler einen Fehler aus.
So ergeben sich nun diese Fehlermeldungen, wenn ein Ausdruck immer wahr oder niemals Null ist:
if (/0x[0-9a-f]/) {
// ~~~~~~~~~~~~
// error: This kind of expression is always truthy.
}
if (x => 0) {
// ~~~~~~
// error: This kind of expression is always truthy.
}
function isValid(value: string | number, options: any, strictness: "strict" | "loose") {
if (strictness === "loose") {
value = +value
}
return value < options.max ?? 100;
// ~~~~~~~~~~~~~~~~~~~
// error: Right operand of ?? is unreachable because the left operand is never nullish.
}
if (
isValid(primaryValue, "strict") || isValid(secondaryValue, "strict") ||
isValid(primaryValue, "loose" || isValid(secondaryValue, "loose"))
) {
// ~~~~~~~
// error: This kind of expression is always truthy.
}
Wie das TypeScript-Team weiter ausführt, lassen sich ähnliche Ergebnisse mit der Regel no-constant-binary-expression
im Codeanalyse-Tool ESLint erzielen. Jedoch handele es sich dabei um keine komplette Ăśberlappung, sodass durch die TypeScript-Ă„nderung ein Mehrwert entstehe.
Erlaubt bleiben bestimmte AusdrĂĽcke mit true
, false
, 0
und 1
, die auch immer truthy beziehungsweise nullish sind, wie in folgendem Beispiel:
while (true) {
doStuff();
if (something()) {
break;
}
doOtherStuff();
}
Zu den weiteren hinzugefügten Sprachfeatures zählen ein neuer Typ namens IteratorObject
und die neue Compiler-Option --noCheck
zum Ăśberspringen des Type Checking fĂĽr alle Input-Dateien.
Der Iterationsplan für TypeScript 5.7 steht schon auf GitHub bereit, um priorisierte Features, Bugfixes und geplante Release-Termine nachzuverfolgen. Demnach soll die nächste Version am 21. November 2024 erscheinen.
Informationen zu allen weiteren Neuerungen im aktuellen Release finden sich in Microsofts TypeScript-Blog.
Lesen Sie auch
Null Problemo: Bessere Null-Checks in Java mit JSpecify
(mai)