Es ist immer wieder interessant, wenn die Entwickler von TypeScript ihre neueste Version ankündigen. Und dieses Mal ist es nicht anders. In diesem Artikel werde ich euch zeigen, was neu ist und was in TypeScript 5.1 verbessert wurde!
Einfachere implizite Rückgaben für undefined
-Rückgabefunktionen
TypeScript 5.1 hat es noch einfacher gemacht, mit Funktionen zu arbeiten, die undefined
zurückgeben. Jetzt müssen nicht mehr alle Codepfade in einer expliziten return
-Anweisung enden, wenn Sie die --noImplicitReturns
-Option verwenden. Hier ist ein kurzes Code-Beispiel, um das zu veranschaulichen:
// ✅ Funktioniert in TypeScript 5.1!
function f1(): undefined {
// kein return erforderlich
}
// ✅ Funktioniert in TypeScript 5.1 unter '--noImplicitReturns'!
function f2(): undefined {
if (Math.random()) {
// tue etwas...
return;
}
}
Getters und Setters können nun unterschiedliche Typen haben
Bisher musste der Typ des get
-Accessors ein Subtyp des set
-Accessors sein. Jetzt können get
und set
Zugriffssteuerungspaare vollkommen unterschiedliche Typen haben, vorausgesetzt, sie haben explizite Typen-Annotationen. Betrachten Sie das folgende Beispiel:
interface Serializer {
set value(v: string | number | boolean);
get value(): string;
}
declare let box: Serializer;
// Ermöglicht das Schreiben eines 'boolean'
box.value = true;
// Kommt als 'string' heraus
console.log(box.value.toUpperCase());
Unterstützung für Namensräume in JSX-Attributen
TypeScript unterstützt nun namensbezogene Attributnamen bei der Verwendung von JSX. Dies kann sowohl bei Attributnamen als auch bei JSX-Tag-Namen verwendet werden. Hier ist ein kurzes Beispiel:
import * as React from "react";
// Beide sind äquivalent:
const x = <Foo a:b="hello" />;
const y = <Foo a : b="hello" />;
interface FooProps {
"a:b": string;
}
function Foo(props: FooProps) {
return <div>{props["a:b"]}</div>;
}
typeRoots
werden jetzt in der Modulauflösung berücksichtigt
Wenn TypeScript's festgelegte Modul-Lookup-Strategie einen Pfad nicht auflösen kann, werden nun Pakete relativ zu den angegebenen typeRoots
aufgelöst.
Verknüpfte Cursor für JSX-Tags
TypeScript unterstützt jetzt verknüpfte Bearbeitung für JSX-Tag-Namen. Dies ermöglicht es einem Editor, mehrere Orte gleichzeitig automatisch zu bearbeiten. Dieses neue Feature kann in den Visual Studio Code Einstellungen aktiviert werden:
{
// ...
"editor.linkedEditing": true
}
Snippet-Autovervollständigungen für @param
JSDoc-Tags
TypeScript bietet jetzt Snippet-Autovervollständigungen an, wenn Sie ein @param
-Tag in TypeScript- und JavaScript-Dateien eingeben.
Optimierungen
Unnötige Typeninstanziierung vermeiden
TypeScript 5.1 vermeidet nun das Durchführen von Typeninstanziierungen innerhalb von Objekttypen, von denen bekannt ist, dass sie keine Verweise auf äußere Typparameter enthalten. Dies hat das Potenzial, viele unnötige Berechnungen zu reduzieren und die Typenprüfungszeit des Verzeichnisses docs
von material-ui
um über 50% zu reduzieren.
Negative Case Checks für Union Literals
Bei der Überprüfung, ob ein Quelltyp Teil eines Union-Typs ist, führt TypeScript zuerst eine schnelle Suche mit einem internen Typ-Identifikator für diese Quelle durch. Wenn diese Suche fehlschlägt, dann prüft TypeScript auf Kompatibilität gegen jeden Typ innerhalb der Union. Wenn ein Literal-Typ mit einer Union aus reinen Literal-Typen in Beziehung gesetzt wird, kann TypeScript nun diesen vollen Durchlauf gegen jeden anderen Typ in der Union vermeiden. Diese Optimierung konnte die Typenprüfungszeit des Codes in diesem Issue von etwa 45 Sekunden auf etwa 0,4 Sekunden reduzieren.
Das sind also die neuen Funktionen und Verbesserungen in TypeScript 5.1. Es sieht so aus, als ob die diese neuen Features zweifellos dazu beitragen werden, die Entwicklungserfahrung zu verbessern und produktiver zu machen. Mehr Informationen und einige neue Sachen, die ich nicht erwähnt habe, findet ihr in der offiziellen Ankündigung.