TypeScript 5.6 lÀsst manchen Code nicht mehr zu

(Bild: RossEdwardCairney/Shutterstock.com)
In der neuen Version der Programmiersprache hat sich einiges getan, was unter anderem den Umgang mit Truthy- und Nullish-PrĂŒfungen betrifft.
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 [1]. 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 [2] 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 [3] 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 [4].
(mai [5])
URL dieses Artikels:
https://www.heise.de/-9863484
Links in diesem Artikel:
[1] https://devblogs.microsoft.com/typescript/announcing-typescript-5-6-beta/#search-ancestor-configuration-files-for-project-ownership
[2] https://www.heise.de/thema/TypeScript
[3] https://github.com/microsoft/TypeScript/issues/59905
[4] https://devblogs.microsoft.com/typescript/announcing-typescript-5-6/
[5] mailto:mai@heise.de
Copyright © 2024 Heise Medien