TypeScript 2.7 ist da und bringt zahlreiche Neuerungen für Entwickler mit. Neben der neuen Strictness Flag und der verbesserten Interoperabilität mit ECMAScript-Modulen ist auch eine neue Syntax dabei, die dazu führt, dass Properties auf jeden Fall zugewiesen werden, auch wenn dies nicht dem Standard in TypeScript entspricht. In TypeScript 2.7 ist diese neue Funktion für variable Declarations verfügbar.
Interoperabilität mit ECMAScript-Modulen
Die vereinfachte Interoperabilität mit ECMAScript-Module in TypeScript 2.7 ist auf die Arbeit mit Legacy-Lösungen ausgelegt, die nicht dem ECMAScript-Standard entsprechen. Vor der Veröffentlichung von ECMAScript 2015 gab es verschiedene Lösungen; bis heute gibt es keinen einheitlichen Standard für den Umgang mit Modulen, die in Legacy-Standards geschrieben wurden, so erläutert Daniel Rosenwasser im TypeScript-Blog. TypeScript 2.7 bietet mit --esModuleInterop
nun eine neue Compiler-Option, die die Interoperabilität der verschiedenen Lösungen mit ECMAScript verbessern soll. Rosenwasser weist darauf hin, dass die Verwendung vor allem für Nutzer von Node.js empfehlenswert sei.
Mit unique symbol
-Types wurden außerdem die Möglichkeiten zur Nutzung von ECMASCript-Symbolen erweitert und flexibler gestaltet. unique symbols
sind eine Unterklasse der Symbole, die für statische Properties (readonly) und die Deklaration von Konstanten verwendet werden kann. Wie der Name bereits sagt, handelt es sich um separate Einheiten, die nicht miteinander verglichen oder einander zugewiesen werden können. Rosenwasser führt folgendes Beispiel dafür im Blogpost zum Release an:
One highly-demanded use-case is being able to declare well-typed properties with symbols. For an example, take the following:
const Foo = Symbol("Foo"); const Bar = Symbol("Bar"); let x = { [Foo]: 100, [Bar]: "hello", }; let a = x[Foo]; // has type 'number' let b = x[Bar]; // has type 'string'
Tuples mit fester Länge
Daneben wurde die Ausgabe des --watch
Modes überarbeitet. Sobald eine neue Compilierung gestartet wird, wird die Anzeige geleert, sodass neue Benachrichtigungen leichter zu lesen sind.
Wie bereits aus dem Release Candidate von TypeScript 2.7 bekannt ist, kodieren Tuple Types nun außerdem ihre Arität in ihrer jeweiligen length
-Eigenschaft. Tuples mit verschiedenen Aritäten können einander nicht mehr zugewiesen werden.
Breaking Changes in TypeScript 2.7
Die vorgenannte feste Länge von Tuple Types wirkt sich auch auf bestehenden Code aus und stellt einen der Breaking Changes des Releases dar. Im Blogpost zum Release werden vier weitere Neuerungen benannt, die zu Problemen mit altem Code führen können. So unterscheideen sich nun beispielsweise auch die von von instanceof
und in
vorgenommenen Einschränkungen von einander. Das setSelectionRange
-API akzeptiert nun außerdem nur noch „forward“ | „backward“ | „none“.
Eine Zusammenfassung der wichtigsten Änderungen an TypeScript 2.7 kann im Blogpost zum Release nachgelesen werden. Die Roadmap auf GitHub gibt einen Überblick über alle neuen Features der nun veröffentlichten Version sowie über die weitere Planung für TypeScript.