Das sind die neuen Features von TypeScript 2.8

TypeScript 2.8 ist da: JSX Factory, Conditional Types und mehr

Ann-Cathrin Klose

© Shutterstock.com / Callahan

Das Team hinter TypeScript ist schnell: Nur 12 Tage nach dem Release Candidate ist TypeScript 2.8 final erschienen. Mit dabei sind nicht nur Conditional Types, sondern auch eine Reihe weiterer neuer Features. Wir geben einen Überblick über die neue Version.

Daniel Rosenwasser, Program Manager bei TypeScript, ist sich in einer Sache ziemlich sicher, wenn es um TypeScript 2.8 geht:

„TypeScript 2.8 is here and brings a few features that we think you’ll love unconditionally!“

Damit bezieht er sich natürlich auf die neuen Types, die TypeScript 2.8 mitbringt: die Conditional Types. Diese wurden, wie die meisten der neuen Features, bereits im Rahmen der Pre-Releases vorgestellt; zum finalen Release gibt es aber noch einmal einen Überblick über alle Neuerungen in TypeScript 2.8 und einige neue Informationen zur genauen Implementierung der neuen Features. Mit dabei in TypeScript 2.8 sind die folgenden neuen Features:

  • Conditional types
  • Declaration-only emit
  • @jsx pragma comments
  • JSX now resolved within factory functions
  • Granular control on mapped type modifiers
  • Organize imports
  • Fixing uninitialized properties

Conditional Types in TypeScript 2.8

Im Rahmen des Blogposts zum finalen Release ist Rosenwasser ein wenig näher auf die Funktionen der Conditional Types eingegangen. Dabei handelt es sich grundsätzlich um Types, die genutzt werden können, wenn zur Runtime eine Entscheidung zwischen verschiedenen Optionen getroffen werden soll, die von Bedingungen abhängig ist. Das Prinzip entspricht dabei dem, das JavaScript auf Values anwenden kann, wird nun aber auf das Typensystem angewandt.

Lesen Sie auch: Die JavaScript-Trends 2018: Vue und das React-Ökosystem

Mit Conditional Types ist außerdem eine Typinferenz möglich. Mit dem Keyword infer ist es somit möglich, Types nicht aus dem Code abrufen zu müssen, um mit ihnen arbeiten zu können. Conditional Types bringen außerdem eine Neuerung für Union Types mit. Außerdem wurden neue Helper mit Conditional Types implementiert. Dabei handelt es sich um die folgenden Type Aliasses:

// These are all now built into lib.d.ts!

/**
 * Exclude from T those types that are assignable to U
 */
type Exclude<T, U> = T extends U ? never : T;

/**
 * Extract from T those types that are assignable to U
 */
type Extract<T, U> = T extends U ? T : never;

/**
 * Exclude null and undefined from T
 */
type NonNullable<T> = T extends null | undefined ? never : T;

/**
 * Obtain the return type of a function type
 */
type ReturnType<T extends (...args: any[]) => any> = T extends (...args: any[]) => infer R ? R : any;

/**
 * Obtain the return type of a constructor function type
 */
type InstanceType<T extends new (...args: any[]) => any> = T extends new (...args: any[]) => infer R ? R : any;

Weitere neue Features in TypeScript 2.8

Zu den kleineren Neuerungen gehört das declaration-only Emit-Flag. Damit können Type Declarations separat von den JavaScript-Dateien ausgegeben werden. Wer mit unterschiedlichen Libraries aus dem React-Ökosystem innerhalb eines Projekts arbeitet, könnte außerdem von der geänderten Auflösung der Namespaces für JSX profitieren. Bisher hat TypeScript Types für JSX-Code in einem globalen Namespace aufgelöst; jetzt kann stattdessen ein Namespace auf Basis der jeweiligen JSX Factory verwendet werden. Somit können separate Namespaces für verschiedene Libraries verwendet werden. Zu dieser Neuerung gehört auch der neue JSX Pragma Comment, mit dem die zu verwendende JSX Factory pro Datei definiert werden kann.

Informationen zu allen weiteren Neuerungen können im TypeScript-Blog nachgelesen werden. Dort findet sich auch eine Auflistung der Breaking Changes des Releases. TypeScript 2.8 wird von Visual Studio 2015 Update 3, Visual Studio 2017 ab Version 15.2 und Visual Studio Code und Sublime Text unterstützt.Die neue Version kann via npm install -g typescript bezogen werden.

Auf dem Weg zu TypeScript 2.9

TypeScript 2.9 soll im Mai 2018 erscheinen. Bislang sind drei neue Features dafür in der Roadmap angekündigt worden:

  • Allow import(…)-ing types at any location
  • Support for generic JSX elements
  • Declaration source maps and code navigation via them

Das zweite und dritte der genannten Features von TypeScript 2.9 sind schon jetzt über typescript@next verfügbar. Bereits geplant, aber noch nicht auf ein Release festgelegt, ist unter anderem die Implementierung des neuen ES Decorator Proposals.

Verwandte Themen:

Geschrieben von
Ann-Cathrin Klose
Ann-Cathrin Klose
Ann-Cathrin Klose hat allgemeine Sprachwissenschaft, Geschichte und Philosophie an der Johannes Gutenberg-Universität Mainz studiert. Bereits seit Februar 2015 arbeitete sie als redaktionelle Assistentin bei Software & Support Media und ist seit Oktober 2017 Redakteurin. Zuvor war sie als freie Autorin tätig, ihre ersten redaktionellen Erfahrungen hat sie bei einer Tageszeitung gesammelt.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.