TypeScript

TypeScript ist eine von Microsoft entwickelte Programmiersprache, die auf den Vorschlägen zum ECMAScript-6-Standard[2] basiert. Sprachkonstrukte von TypeScript, wie Klassen, Vererbung, Module und anonyme Funktionen, wurden auch in ECMAScript 6 übernommen.[3]

Der von Microsoft entwickelte TypeScript-Compiler kompiliert TypeScript-Code nach ECMA Script 3 (ES3), optional auch nach ECMA Script 5 (ES5) zu plain JavaScript. TypeScript ist eine Obermenge (strict superset) von JavaScript, jeder JavaScript-Code ist daher auch gültiger TypeScript-Code, so dass gängige JavaScript-Bibliotheken (wie z. B. jQuery oder AngularJS) auch in TypeScript verwendet werden können.[3]

TypeScript unterstützt mit Modulen das Kapseln von Klassen, Interfaces, Funktionen und Variablen in eigene Namensräume. Dabei wird zwischen internen und externen Modulen unterschieden. Interne Module lehnen sich an die Modul-Spezifikation aus ECMAScript 6 an, wohingegen externe Module eine JavaScript-Bibliothek (AMD oder CommonJS) nutzen.[4]

TypeScript kann mit Hilfe von Plug-ins in verschiedene Build-Management-Tools integriert werden, darunter Grunt (grunt-ts[5]), Apache Maven (TypeScript Maven Plugin[6]) und Gradle (TypeScript Gradle Plugin[7]).

Geschichte

Die erste öffentlich verfügbare Version von TypeScript wurde 2012 nach zwei Jahren Entwicklung von Microsoft in der Version 0.8 veröffentlicht.[8][9] Kurz nach Ankündigung der Sprache wurde diese von Miguel de Icaza gelobt. Jedoch bemängelte er, dass es keine weiteren Entwicklungsumgebungen abseits von Microsoft Visual Studio gab, das 2013 nicht für Linux und macOS zur Verfügung stand.[10][11] Seit 2013 gab es Plugin-Support für Eclipse, der von Palantir Technologies bereitgestellt wurde.[12][13] Mittlerweile unterstützen eine Vielzahl von Texteditoren und Entwicklungsumgebungen TypeScript. Darunter befinden sich unter anderem Emacs, vim, Sublime Text, WebStorm, Atom[14] und Microsofts eigener Editor Visual Studio Code.

TypeScript 0.9 wurde 2013 veröffentlicht und brachte Unterstützung für Generische Typen.

TypeScript 1.0 wurde 2014 auf Microsofts hauseigener Entwicklerkonferenz Build vorgestellt.[15] Auch erhielt Visual Studio Unterstützung für TypeScript.[16]

Im Juli 2014 kündigten die Entwickler von TypeScript einen neuen Compiler an, der fünfmal schneller sein sollte als der alte. Gleichzeitig wurde der bisherige Quellcode von TypeScript von CodePlex zu GitHub migriert.[17]

Am 22. September 2016 wurde die Version 2.0 veröffentlicht, die diverse neue Funktionen einführte. Unter anderem wurde eine optionale Funktion eingeführt, um zu verhindern, dass Variablen standardmäßig mit null initialisiert sind.[18] Dies soll zu weniger Nullpointer Exceptions führen.

Am 30. Juli 2018 wurde die Version 3.0 veröffentlicht. Besonders hervorzuheben ist der neue primitive Typ unknown. Zusammen mit void (dem Einheitstyp) und never (dem leeren Typ) vervollständigt er die Ränder der Typenhierarchie: unknown ist ein Universaltyp; einer Variable davon kann jedes Objekt zugewiesen werden, und entsprechend kann man von einem unknown-Wert nichts erwarten. TypeScript verlangt dann eine Assertion oder Checks. Im Unterschied dazu ist any zwar auch ein Universaltyp, jedoch erlaubt TypeScript die Verwendung der Werte direkt, obwohl eigentlich keine Information darüber vorliegt. Damit ist unknown nichts anderes als das typsichere Äquivalent zu any.

Features

TypeScript erweitert die Sprache ECMAScript 6 um folgende Merkmale:

Folgende Elemente wurden durch einen Backport von ECMAScript 2015 hinzugefügt:

  • Klassen
  • Module[19]
  • Arrow-Syntax für anonyme Funktionen
  • Optionale Parameter und Standardparameter

Kompatibilität mit JavaScript

TypeScript ist eine Obermenge von ECMAScript 2015, das selbst eine Obermenge von ECMAScript 5 ist, was oft in Referenz mit JavaScript gestellt wird.[20] Ein JavaScript-Programm ist somit auch ein valides TypeScript-Programm. Somit kann TypeScript ohne Probleme JavaScript verwenden. Der Compiler benutzt normalerweise ECMAScript 5, aber es besteht auch die Möglichkeit, Konstrukte von ECMAScript 3 oder 2015 zu verwenden.

TypeScript bietet die Möglichkeit an, existierenden JavaScript-Code und bekannte JavaScript-Bibliotheken zu verwenden.[21]

Methodensignatur

TypeScript bietet Methodensignaturen an, die das Überprüfen von Methoden während der Kompilierung ermöglichen. Dies ist optional und kann ignoriert werden.

function add(left: number, right: number): number {
	return left + right;
}

Die Annotationen für die primitiven Typen sind number, boolean und string.

Klassen

TypeScript unterstützt ECMAScript-2015-Klassen, die optionale Methodensignaturen verwenden können:

class Person {
    private name: string;
    private age: number;
    private salary: number;

    constructor(name: string, age: number, salary: number) {
        this.name = name;
        this.age = age;
        this.salary = salary;
    }

    toString(): string {
        return `${this.name} (${this.age}) (${this.salary})`; // As of version 1.4
    }
}

Generische Programmierung

TypeScript unterstützt Generische Programmierung.[22] Das ist ein Beispiel einer Identitätsfunktion:[23]

function doSomething<T>(arg: T): T {
    return arg;
}

Design

TypeScript stammt von der Skriptsprache JavaScript ab und will dessen Mängel im Bereich der Entwicklung von großen Applikationen beheben, was von Microsoft selbst veranlasst wurde.[24] Die Herausforderung, mit dem komplexen Code von JavaScript umzugehen, führte dazu, dass ein dafür angepasstes Werkzeug zur Vereinfachung der Entwicklung dieser Komponenten erstellt wurde.[25]

Die Entwickler von TypeScript suchten eine Lösung, die nicht die Kompatibilität mit dem Standard oder die Plattformunabhängigkeit von JavaScript gefährdet. Mit dem Wissen, dass ECMAScript in Zukunft das klassenbasierte Programmieren unterstützen wollte, wurde TypeScript auf diesem Grundsatz entwickelt. Das führte zu einem JavaScript-Compiler mit einigen Erweiterungen, die den Code in JavaScript übersetzen.

ECMAScript-2015-Unterstützung

TypeScript fügte die Unterstützung des ECMAScript-2015-Standards hinzu.

Versionsgeschichte

VersionsnummerVeröffentlichungsdatumÄnderungen
0.81. Oktober 2012Erste Veröffentlichung
0.918. Juni 2013Generische Ausdrücke, Überladen von konstanten Parametern, Enum[26]
1.16. Oktober 2014Performanceverbesserungen
1.312. November 2014protected Zugriffsmodifikator, Tupel-Typen
1.420. Januar 2015Union-Typen, let und const Deklarationen, Template Strings, Type Guards, Type Aliases
1.520. Juli 2015ES6-Module, namespace Keyword, for..ofSupport, Decorator
1.616. September 2015JSX-Unterstützung, Intersection Typen, lokale Typdeklarationen, abstrakte Klassen und Methoden, benutzerdefinierte Guard-Funktionen
1.730. November 2015Unterstützung für async und await[27]
1.822. Februar 2016Constraints Generics, Kontrollfluss-Fehleranalyse, Stringliteral-Typen, allowJs
2.022. September 2016null- und undefined-verhindernde Typen, kontrollflussbasierte Typanalyse, Discriminated Uniontypen, never Typ, readonly Keyword, this
2.18. November 2016keyof und Lookup Typen, gemappte Typen, REST- und Spread-Eigenschaften für Objekte
2.222. Februar 2017Mix-in Klassen, object Typ
2.327. April 2017async Iteration, generische Standardparameter, strict-Option
2.427. Juni 2017dynamische import Ausdrücke, String Enums, verbesserte Vererbung für generische Datentypen, strikte Kontravarianz für Callback-Parameter
2.531. August 2017optionale Catch-Clause-Variablen für Exceptions
2.631. Oktober 2017strikte Funktionstypen
2.731. Januar 2018const-benannte Eigenschaften, Tupel mit fester Länge
2.827. März 2018Conditional-Typen, Verbesserung von keyof in Kombination mit Intersection-Typen
2.931. Mai 2018Unterstützung von number und symbol benannten Eigenschaften mit keyof und endlichen Abbildungen. import(...)-Typen.
3.030. Juli 2018Tupel als REST-Parameter, Spread-Ausdrücke für Tupel, generische REST-Parameter, Optionale Elemente in Tupel, unknown als Universaltyp (siehe auch Typentheorie), defaultProps in JSX[28]
3.127. September 2018Gemappte Tuple und Array-Typen
3.230. November 2018Strengere Kontrolle von bind, call und apply
3.331. Januar 2019Lockere Regeln für Methoden der Verbindungsarten, inkrementelle Builds für Verbundprojekte
3.429. März 2019Verbesserungen zu inkrementellen Builds, Composite Projects, Inference, Read-Only Arrays, Type-Checking für globale Variablen und diverse andere
3.529. Mai 2019Omit als neuer integrierter Typ[29]
3.628. August 2019striktere Iterator- und Generatorfunktionen, Unterstützung für Unicode bei Bezeichnern[30]
3.75. November 2019Optionale Verkettung, Nullish Coalescing Operator, Assertion Functions, verbesserte Unterstützung für Methoden, die never zurückliefern, und viele weitere.[31]
3.820. Februar 2020Type-Only Imports und Exports, private Felder, Top-Level await und viele weitere Änderungen.[32]
3.912. Mai 2020Geschwindigkeitsverbesserungen beim Build, @‌ts-expect-error Kommentar, Verbesserungen für Editoren und weitere Änderungen.[33]
4.020. August 2020Variadische Tupel, Namen für Elemente in einem Tupel, bessere JSX-Unterstützung[34]
4.119. November 2020Verkettung von String-Typen[35]

Weblinks

  • DefinitelyTyped: Sammlung von TypeScript-Interfaces für beliebte JavaScript-Frameworks

Einzelnachweise

  1. github.com.
  2. ECMAScript Wiki. (Nicht mehr online verfügbar.) Archiviert vom Original am 22. Mai 2008; abgerufen am 3. April 2013 (englisch).  Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/wiki.ecmascript.org
  3. a b TypeScript. Abgerufen am 3. April 2013 (englisch, TypeScript Homepage).
  4. An introduction to TypeScript’s module system. Abgerufen am 4. Februar 2014 (englisch, Artikel zum Modulsystem von TypeScript).
  5. grunt-ts. Abgerufen am 21. Februar 2014 (englisch).
  6. TypeScript Maven Plugin. Abgerufen am 21. Februar 2014 (englisch).
  7. TypeScript Gradle Plugin. Abgerufen am 21. Februar 2014 (englisch).
  8. IDG News Service staff: Microsoft augments JavaScript for large-scale development. In: InfoWorld. (infoworld.com [abgerufen am 11. Juli 2018]).
  9. Announcing TypeScript 1.0. (microsoft.com [abgerufen am 11. Juli 2018]).
  10. @COPYRIGHT@: TypeScript: First Impressions - Miguel de Icaza. Abgerufen am 11. Juli 2018 (englisch).
  11. Matt Baxter-Reynolds: Microsoft TypeScript: Can the father of C# save us from the tyranny of JavaScript? | ZDNet. In: ZDNet. (zdnet.com [abgerufen am 11. Juli 2018]).
  12. Julia Schmidt: TypeScript-Unterstützung für Eclipse. Abgerufen am 11. Juli 2018 (deutsch).
  13. TypeScript. In: Eclipse Plugins, Bundles and Products - Eclipse Marketplace. (eclipse.org [abgerufen am 11. Juli 2018]).
  14. TypeStrong/atom-typescript. Abgerufen am 11. Juli 2018 (englisch).
  15. TypeScript. Abgerufen am 11. Juli 2018.
  16. Working with TypeScript in Visual Studio 2012. In: Dr. Dobb's. (drdobbs.com [abgerufen am 11. Juli 2018]).
  17. New Compiler and Moving to GitHub. (msdn.com [abgerufen am 11. Juli 2018]).
  18. TypeScript, Microsoft’s JavaScript for big applications, reaches version 2.0. In: Ars Technica. (arstechnica.com [abgerufen am 11. Juli 2018]).
  19. Microsoft Previews New JavaScript-Like Programming Language TypeScript. In: TechCrunch. Abgerufen am 18. Mai 2020 (amerikanisches Englisch).
  20. Angular. Abgerufen am 18. Mai 2020.
  21. Typed JavaScript at Any Scale. Abgerufen am 18. Mai 2020 (englisch).
  22. Announcing TypeScript 0.9. 18. Juni 2013, abgerufen am 18. Mai 2020 (amerikanisches Englisch).
  23. Handbook - Generics. Abgerufen am 18. Mai 2020 (englisch).
  24. Scott Hanselman: What is TypeScript and why with Anders Hejlsberg. Abgerufen am 18. Mai 2020 (englisch).
  25. kexugit: TypeScript: JavaScript Development at Application Scale. Abgerufen am 18. Mai 2020 (amerikanisches Englisch).
  26. Announcing TypeScript 0.9. 18. Juni 2013, abgerufen am 19. Januar 2021 (amerikanisches Englisch).
  27. https://www.typescriptlang.org/docs/handbook/release-notes/typescript-1-7.html abgerufen am 1. August 2019
  28. Announcing TypeScript 3.0. 30. Juli 2018, abgerufen am 19. Januar 2021 (amerikanisches Englisch).
  29. Announcing TypeScript 3.5. 29. Mai 2019, abgerufen am 19. Januar 2021 (amerikanisches Englisch).
  30. Announcing TypeScript 3.6. 28. August 2019, abgerufen am 19. Januar 2021 (amerikanisches Englisch).
  31. Announcing TypeScript 3.7. 5. November 2019, abgerufen am 2. März 2020 (amerikanisches Englisch).
  32. Announcing TypeScript 3.8. 20. Februar 2020, abgerufen am 2. März 2020 (amerikanisches Englisch).
  33. Announcing TypeScript 3.9. 12. Mai 2020, abgerufen am 14. Mai 2020 (amerikanisches Englisch).
  34. Announcing TypeScript 4.0. 20. August 2020, abgerufen am 19. Januar 2021 (amerikanisches Englisch).
  35. Announcing TypeScript 4.1. 19. November 2020, abgerufen am 19. Januar 2021 (amerikanisches Englisch).