TypeScript 3.5 verbessert das Prüfen von Union Types

Das JavaScript-Superset bekommt zudem den neuen Helper-Typen Omit und verbessert den inkrementellen Compiler.

In Pocket speichern vorlesen Druckansicht 4 Kommentare lesen
TypeScript 3.5 verbessert den inkrementellen Compiler
Lesezeit: 3 Min.
Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

Microsoft hat planmäßig den Release Candidate von TypeScript 3.5 veröffentlicht. Der Großteil der Neuerungen findet sich unter der Haube und optimiert unter anderem den im Vorgänger eingeführten inkrementellen Compiler und verbessert das Überprüfen von Union Types. Als syntaktische Erweiterung ist der neue Omit-Helper-Typ hervorzuheben.

Das vor zwei Monaten veröffentlichte TypeScript 3.4 hat den inkrementellen Compiler eingeführt. Das aktuelle Release hat einige Performanceverbesserungen an Bord. Es cached unter anderem allgemeine Parameter wie die Compiler-Settings sowie warum Dateien beim Build gesucht und wo sie gefunden wurden.

Ein Bugfix hat in der Vorversion versehentlich zu einer Regression des Type-Checkers geführt, wodurch die Typenprüfung in einigen Fällen deutlich länger als in TypeScript 3.3 gedauert hat – und zwar nicht nur beim Build, sondern auch beim Prüfen im Editor, der dadurch laut Aussage der TypeScript-Entwickler unerträglich langsam werden konnte. Die Korrekturen und Verbesserungen in TypeScript 3.5 haben wohl dazu geführt, dass die Prüfung nicht nur schneller als im direkten Vorgänger, sondern auch als in TypeScript 3.3 sind.

Aber auch inhaltlich gibt es Neuerungen beim Prüfen des Sourcecodes. Das betrifft unter anderem das sogenannte Excess Property Checking, das vor allem Tippfehler in Properties aufspüren soll. Bei Union Types schlug der Prüfvorgang jedoch nicht zu, und hat unter anderem fehlerhafte Typzuweisungen wie in folgendem Beispiel aus dem TypeScript-Blog durchgewunken und das Zuweisen eines boolschen Wertes für den String name übersehen, was in der aktuellen Version nicht mehr passiert:

type Point = {
x: number;
y: number;
};

type Label = {
name: string;
};

const thing: Point | Label = {
x: 0,
y: 0,
name: true // uh-oh!
};

Umgekehrt war der Type-Checker bei einigen Union Types zu streng, wenn beispielsweise der Quelltyp eine Property vom Typ boolean enthält und der Zieltyp eine direkte Zuweisung als true oder false vorsieht:

type S = { done: boolean, value: number }
type T =
| { done: false, value: number }
| { done: true, value: number };

TypeScript 3.5 nimmt für solche Fälle nun implizit eine Aufteilung in die möglichen Varianten vor, würde somit für obiges Beispiel S als Union aus { done: false, value: number } und { done: true, value: number } betrachten.

Der neue Hilfstyp Omit soll das Erstellen von Objekten, die einzelne Properties auslassen vereinfachen. Er ist folgendermaßen definiert

type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;

und bildet somit eine Kombination aus den internen TypeScript-Helpers Exclude und Pick. Ersterer definiert die auszulassende Property und durch letzteren lassen sich neue Typen mit den verbleibenden Properties festlegen.

Weitere Neuerungen wie das --allowUmdGlobalAccess-Flag, dass das Referenzieren sogenannter UMD-Globals vereinfachen soll, lassen sich Microsofts Entwicklerblog entnehmen. Derzeit hat das JavaScript-Superset den Status eines Release Candidate, mit der fertigen Variante dürfte Anfang Juni zu rechnen sein. (rme)