Programmiersprache TypeScript 5.1 gibt sich flexibler beim Property-Zugriff

Neben den Anpassungen bei Gettern und Settern, die nun völlig unterschiedliche Typen haben dürfen, bringt das Release Ergänzungen im Zusammenspiel mit JSX.

In Pocket speichern vorlesen Druckansicht

(Bild: Shutterstock)

Lesezeit: 3 Min.
Inhaltsverzeichnis

Microsoft hat die erste Beta von TypeScript 5.1 veröffentlicht. Das Release weicht die Typvorgaben für Getter und Setter weiter auf. Außerdem erlaubt die Programmiersprache im Zusammenspiel mit JSX Namespaced Attributes und bietet das gleichzeitige Bearbeiten zusammengehöriger Tags in Visual Studio Code.

Getter und Setter zum Auslesen beziehungsweise Setzen von Properties mussten bis TypeScript 4.2 denselben Typ haben. Version 4.3 der Programmiersprache hat die Vorgaben gelockert: Die Aufrufe von get und set dürfen seitdem unterschiedliche Typdeklarationen erhalten. Auf die Weise kann ein Setter mehrere Typen verarbeiten und umwandeln, während der Getter genau einen Typ zurückgibt.

Bisher musste der Typ des Getter jedoch ein gültiger Typ für den Setter sein. Damit war auch stets eine direkte Zuweisung des Werts aus dem Getter an den Setter möglich: foo.value = foo.value. Die Typeinschränkung für den Getter entfällt mit TypeScript 5.1.

Hintergrund ist, dass einige APIs völlig unterschiedliche Typen für das Auslesen und das Setzen von Properties erfordern. Der TypeScript-Blog nennt als Beispiel die Property style im DOM (Document Object Model). Sie gibt ein CSSStyleDeclaration-Objekt zurück, lässt sich aber nicht mit demselben Objekttyp setzen und ist in der WebAPI als Read-only gekennzeichnet. Für das Festlegen von style ist stattdessen ein String erforderlich.

Mit TypeScript 5.1 sind dazu passende Getter und Setter nun erlaubt, wie folgender Codeausschnitt aus dem TypeScript-Blog zeigt:

interface CSSStyleRule {
    // ...

    /** Always reads as a `CSSStyleDeclaration` */
    get style(): CSSStyleDeclaration;

    /** Can only write a `string` here. */
    set style(newValue: string);

    // ...
}

Im Zusammenspiel mit der für React entwickelten JavaScript-Syntaxerweiterung JSX (JavaScript Syntax Extension oder JavaScript XML) bringt das aktuelle Release gleich drei Neuerungen mit. Zum einen erlaubt es Namespaces für Attribute. Sie lassen sich über JSX.IntrinsicElements definieren:

// Code in einer Library zum Definieren des
// Attributs im Namespace
namespace JSX {
    interface IntrinsicElements {
        ["a:b"]: { prop: string };
    }
}

// Verwenden des Attributs:
let x = <a:b prop="hello!" />;

Außerdem ändert das Release die Regeln für die Typprüfung von JSX-Element-Tags. Damit sie gültig sind, muss der erstellte beziehungsweise zurückgegebene Typ nicht mehr zwingend kompatibel mit JSX.Element sein. Stattdessen lassen sich die gültigen Tags in der JSX-Deklaration unter export type ElementType festlegen.

Im Zusammenspiel mit Visual Studio Code (Insiders) und dem kommenden Visual Studio 17.7 bietet TypeScript für JSX-Tags nun Linked Cursors: Zusammengehörige Tags lassen sich im Editor gleichzeitig bearbeiten, um den Namen des öffnenden und schließenden Tags einheitlich zu halten. Voraussetzung ist, dass Linked Editing in der Entwicklungsumgebung aktiviert ist – in Visual Studio Code über editor.linkedEditing in der JSON-Datei mit den Settings oder direkt im Editor über die Einstellung Editor: Linked Editing.

Nennenswert in TypeScript 5.1 ist zudem, dass Funktionen, die undefined zurückgeben, keine explizite return-Anweisung mehr benötigen. Bisher durften nur void-Funktionen und solche, die den Rückgabewert any haben, auf return verzichten. Obwohl sie in dem Fall jeweils undefined zurückgeben, benötigten Funktionen mit dem expliziten Rückgabewert undefined vor dem aktuellen Release ein Return-Statement.

Weitere Neuerungen in TypeScript 5.1 wie Snippet-Vervollständigungen für @param-Tags in JSDoc lassen sich dem TypeScript-Blog entnehmen. Die Betaphase ist auf sechs Wochen ausgelegt, und das endgültige Release soll am 30. Mai erscheinen.

(rme)