Programmiersprache: TypeScript 2.7 erweitert die Prüfung der Variablen-Initialisierung

Der von Microsoft entwickelte JavaScript-Aufsatz überprüft nun auch Klassen-Properties auf korrekte Initialisierung. Umgekehrt lassen sich Variablen nun mit einem Ausrufezeichen versehen, um die spätere Initialisierung anzukündigen.

In Pocket speichern vorlesen Druckansicht
TypeScript 2.7 erweitert die Prüfung der Initialisierung von Variablen
Lesezeit: 4 Min.
Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

Mit leichter Verspätung hat Microsoft TypeScript 2.7 herausgegeben. Dass der Abstand zu Version 2.6 drei statt der geplanten zwei Monate beträgt, mag den Weihnachtsfeiertagen geschuldet sein. Zu den Neuerungen gehört unter anderem eine bessere Interoperabilität zu ECMAScript-Modulen, die aus der Zeit vor der in ES2015 erfolgten Standardisierung stammen. Dazu dient das neu eingeführte Compiler-Flag --esModuleInterop.

Gleich zwei Neuerungen betreffen das Überprüfen der korrekten Initialisierung von Variablen. Das neu eingeführte Flag --strictPropertyInitialization stellt sicher, dass die Properties von Klassen korrekt initialisiert sind, also entweder bei der Deklaration oder im Konstruktor einen Wert erhalten. Folgender Code zeigt zwei korrekte und eine fehlerhafte Property:

class Beispiel {
zahl: number; // korrekt durch Konstruktor
hallo = "hello"; // korrekt
fehler: boolean; // nicht initialisiert
constructor() {
this.zahl = 1;
}
}

Der Wert für hallo steht in der Initialisierung, und der Konstruktor weist zahl einen Wert zu, aber fehler ist nicht initialisiert. Umgekehrt können Entwickler die strikte Prüfung bei Variablen unterdrücken, indem sie eine nicht initialisierte Variable mit einem ! versehen, das eine spätere Initialisierung ankündigt.

Eine weitere Neuerung betrifft die in ECMAScript 2015 eingeführten Symbole. In TypeScript 2.7 lassen sie sich nun als "unique" deklarieren. Erlaubt ist das Vorgehen jedoch nur für unveränderbare Symbole, die entweder als const deklariert sind oder static readonly Properties sind:

declare const Einzigartig: unique symbol;       // erlaubt
let Fehler: unique symbol = Symbol(); // nicht erlaubt,
// da keine Konstante
let Gebunden: typeof Einzigartig = Einzigartig; // erlaubt, da Einzigartig
// unique symbol ist
class C {
static readonly Statisch: unique symbol = Symbol(); // erlaubt
}

Andere Sprachen wie Java oder Kotlin seit Version 1.1 erlauben die optische Trennung langer Zahlen durch den Unterstrich bereits seit geraumer Zeit. Für den kommenden JavaScript-Standard ECMAScript 2018 existiert ein entsprechendes Proposal. Ein Anspruch von TypeScript ist, kommende Standards bereits zeitig zu implementieren. Dem wird Version 2.7 für die geplanten Trennzeichen gerecht. Die Unterstriche lassen sich nicht nur für Dezimal-, sondern unter anderem auch in Hexadezimal und Binärzahlen verwenden. Sie haben keine Auswirkungen auf den Code, sondern verbessern lediglich die Lesbarkeit.

Das TypeScript-Flag --pretty dient demselben Zweck, wenn auch an anderer Stelle: Es soll Fehlermeldungen besser lesbar machen. Neu ist in TypeScript 2.7, dass es nun Farben verwendet, um unter anderem Dateinamen oder Zeilennummern hervorzuheben.

Einige Neuerungen führen potenziell zu Inkompatibilitäten. An erster Stelle ist die feste Länge für Tupel zu nennen. Motivation für die Anpassung ist, dass das bisherige Vorgehen eher zu Fehlern führte, als dass es den gewünschten Nutzen hatte. Bis TypeScript 2.6 galt [number, string, string] als Untertyp von [number, string]. Das gilt in Version 2.7 der Programmiersprache nicht mehr, und Entwickler dürfen Tupel unterschiedlicher Länge nicht mehr untereinander zuweisen. Inkompatibilitäten können zudem durch Anpassungen von in und Begrenzungen der setSelectionRange-API entstehen.

Weitere Neuerungen und Breaking Changes finden sich im TypeScript-Blog. TypeScript 2.7 lässt sich über npm herunterladen: npm install - g typescript. Updates existieren zudem für Nutzer von Visual Studio 2015 (Update 3) und VS 2017 (ab Version 15.2). Visual Studio Code wird TypeScript 2.7 im typischerweise zur Monatsmitte erscheinenden frischen Release enthalten. Ein manuelles Update ist aber ebenso möglich. Für Sublime-Text-Nutzer ist das aktuelle Release über Package Control verfügbar. (rme)