TypeScript ist eine von Microsoft entwickelte Skriptsprache, die auf den Vorschlägen zum ECMAScript-6-Standard[2] basiert und statische Typisierung zu JavaScript hinzufügt. Sprachkonstrukte von TypeScript, wie Klassen, Vererbung, Module und anonyme Funktionen, wurden auch in ECMAScript 6 übernommen.[3]
TypeScript ist eine echte Obermenge (strict superset) von JavaScript bzw. ECMAScript 2015. Jeder JavaScript-Code ist daher auch gültiger TypeScript-Code, so dass gängige JavaScript-Bibliotheken (wie z. B. jQuery oder Angular) 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]
Der von Microsoft entwickelte TypeScript-Compiler transkompiliert TypeScript-Code nach ECMAScript 5 (ES5), optional auch nach ECMAScript 3 (ES3).
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 Emacs, vim, Sublime Text[14], WebStorm, Atom[15] 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.[16] Auch erhielt Visual Studio Unterstützung für TypeScript.[17]
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.[18]
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.[19] 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:
- Methodensignatur
- Typinferenz
- Type Erasure
- Interfaces
- Aufzählungstyp
- Generische Programmierung
- Namensräume
- Tupel
- Async/Await
Folgende Elemente wurden durch einen Backport von ECMAScript 2015 hinzugefügt:
- Klassen
- Module[20]
- 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.[21] 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.[22]
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[23], 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.[24] Das ist ein Beispiel einer Identitätsfunktion:[25]
function doSomething<T>(arg: T): T {
return arg;
}
Union-Typen
Union-Typen werden in TypeScript unterstützt.[26] Es können insbesondere auch komplexe Typen als sogenannte Tagged Union Types[27] definiert werden.
function successor(n: number | bigint): number | bigint {
return ++n;
}
Module und Namespaces
TypeScript unterscheidet zwischen Modulen und Namespaces. Beide Features in TypeScript unterstützen die Kapselung von Klassen, Schnittstellen, Funktionen und Variablen in Containern. Namespaces (ehemals interne Module) verwenden sofort aufgerufene Funktionsausdrücke von JavaScript, um Code zu kapseln, während Module (ehemals externe Module) JavaScript-Bibliotheksmuster nutzen, um dies zu tun (AMD oder CommonJS).[28]
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.[29] 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.[30]
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.
TypeScript hat sich zu einem de-facto Standard für größere JavaScript-Projekte entwickelt. Insbesondere in modernen Frontend-Frameworks wie React.js, Angular und Vue.js wird TypeScript zunehmend als bevorzugte Entwicklungssprache eingesetzt. Die strikte Typisierung ermöglicht eine bessere Wartbarkeit von Code, reduziert Laufzeitfehler erheblich und verbessert die Entwicklererfahrung durch erweiterte IDE-Unterstützung mit intelligenter Autovervollständigung sowie Refactoring-Tools.
TypeScript fügte die Unterstützung des ECMAScript-2015-Standards hinzu.
Versionsgeschichte
protected Zugriffsmodifikator, Tupel-Typen
let und const Deklarationen, Template Strings, Type Guards, Type Aliases
namespace Keyword, for..ofSupport, Decorator
async und await[31]
allowJs
null- und undefined-verhindernde Typen, kontrollflussbasierte Typanalyse, Discriminated Uniontypen, never Typ, readonly Keyword, this
keyof und Lookup Typen, gemappte Typen, REST- und Spread-Eigenschaften für Objekte
object Typ
async Iteration, generische Standardparameter, strict-Option
import Ausdrücke, String Enums, verbesserte Vererbung für generische Datentypen, strikte Kontravarianz für Callback-Parameter
const-benannte Eigenschaften, Tupel mit fester Länge
keyof in Kombination mit Intersection-Typen
number und symbol benannten Eigenschaften mit keyof und endlichen Abbildungen. import(...)-Typen.
unknown als Universaltyp (siehe auch Typentheorie), defaultProps in JSX[32]
bind, call und apply
Omit als neuer integrierter Typ[33]
never zurückliefern, und viele weitere.[35]
await und viele weitere Änderungen.[36]
@ts-expect-error Kommentar, Verbesserungen für Editoren und weitere Änderungen.[37]
in-Operator, abstrakte Konstruktionssignaturen, verbesserte Überprüfungen von nicht aufgerufenen Funktionen in logischen Ausdrücken, destrukturierte Variablen können explizit als unbenutzt markiert werden, lockere Regeln zwischen optionalen Eigenschaften und String-Index-Signaturen[40]
unknown-Typ in Catch-Variablen, „static“-Blöcke in Klassen, Performance-Verbesserungen[42]
type-Deklarationen für Importnamen, Prüfungen auf private Felder in Objekten, import-Prüfungen[43]
super(), verbesserte Prüfungen der Rekursionstiefe[44]
infer-type-Variablen, optionale Varianz-Annotationen für type-Parameter[45]
--build, --watch und --incremental Leistungsverbesserungen, Fehler beim Vergleich von Objekt- und Array-Literalen, Verbesserte Inferenz aus Bindungsmustern, Fehlerbehebungen bei der Dateiüberwachung (insbesondere bei Git-Checkouts), Leistungsverbesserungen bei „Find-All-References“, Ausschließen von bestimmten Dateien bei Auto-Import[46]
satisfies-Operator, Auto-Accessors in Klassen[47]
export type *[48]
undefined als Funktionsrückgabewert, unabhängige Typen für get und set, Namensräume für JSX-Attribute[49]
using-Keyword zum Ressourcen-Management, benannte und anonyme Tuple-Elemente, Refactoring, um den Inhalt einer Variable an allen Benutzungen einzufügen (inlining), klickbare Inlay-Parameterhinweise im Editor[50]
switch(true) mit Bedingungen in jeder case-Klausel[51]
NoInfer-Hilfstyp, Typendeklarationen für Object.groupBy und Map.groupBy, Quick Fix im Editor um fehlende Parameter hinzuzufügen[52]
.filter(...) beim herausfiltern von undefined), Typen-Eingrenzung bei konstanten Index-Zugriff (z. B. von obj[key], wenn obj und key) konstant sind, Syntaxprüfung bei Regulären Ausdrücken, neue ECMAScript Set Methoden[53]
--noCheck Option um Typenprüfung zu überspringen[54]
--target es2024 und --lib es2024 hinzugefügt, Validierung von JSON Importen in --module nodenext[55]
Weblinks
Einzelnachweise
- ↑ Release 6.0.3. 16. April 2026 (abgerufen am 17. April 2026).
- ↑ ECMAScript Wiki. Archiviert vom (nicht mehr online verfügbar) am 22. Mai 2008; abgerufen am 3. April 2013 (englisch).
- ↑ a b TypeScript. Abgerufen am 3. April 2013 (englisch, TypeScript Homepage).
- ↑ An introduction to TypeScript’s module system. Archiviert vom (nicht mehr online verfügbar) am 1. Februar 2014; abgerufen am 12. März 2025 (englisch, Artikel zum Modulsystem von TypeScript).
- ↑ grunt-ts. Abgerufen am 21. Februar 2014 (englisch).
- ↑ TypeScript Maven Plugin. Abgerufen am 21. Februar 2014 (englisch).
- ↑ TypeScript Gradle Plugin. Abgerufen am 21. Februar 2014 (englisch).
- ↑ IDG News Service staff: Microsoft augments JavaScript for large-scale development. In: InfoWorld. 1. Oktober 2012, abgerufen am 11. Juli 2018 (englisch).
- ↑ Jonathan Turner: Announcing TypeScript 1.0. In: blogs.msdn.microsoft.com. 2. April 2014, abgerufen am 11. Juli 2018 (englisch).
- ↑ Miguel de Icaza: TypeScript: First Impressions. Abgerufen am 11. Juli 2018 (englisch).
- ↑ Matt Baxter-Reynolds: Microsoft TypeScript: Can the father of C# save us from the tyranny of JavaScript? In: ZDNet. 1. Oktober 2012, abgerufen am 11. Juli 2018 (englisch).
- ↑ Julia Schmidt: TypeScript-Unterstützung für Eclipse. Abgerufen am 11. Juli 2018.
- ↑ Eclipse TypeScript Plug-in. In: github.com. Palantir, abgerufen am 11. Juli 2018 (englisch).
- ↑ Sublime Text 4. Abgerufen am 16. August 2022 (englisch).
- ↑ TypeStrong/atom-typescript. Abgerufen am 11. Juli 2018 (englisch).
- ↑ Anders Hejlsberg: TypeScript. In: channel9.msdn.com. 2. April 2014, archiviert vom (nicht mehr online verfügbar) am 5. April 2014; abgerufen am 11. Juli 2018 (englisch).
- ↑ Gaston Hillar: Working with TypeScript in Visual Studio 2012. In: Dr. Dobb’s. 14. Mai 2013, archiviert vom (nicht mehr online verfügbar) am 9. Juni 2013; abgerufen am 11. Juli 2018 (englisch).
- ↑ Jonathan Turner: New Compiler and Moving to GitHub. In: blogs.msdn.com. 21. Juli 2014, archiviert vom (nicht mehr online verfügbar) am 22. Juli 2014; abgerufen am 11. Juli 2018 (englisch).
- ↑ TypeScript, Microsoft’s JavaScript for big applications, reaches version 2.0. In: Ars Technica. 22. September 2016, abgerufen am 11. Juli 2018 (englisch).
- ↑ Klint Finley: Microsoft Previews New JavaScript-Like Programming Language TypeScript. In: TechCrunch. 1. Oktober 2012, abgerufen am 18. Mai 2020 (amerikanisches Englisch).
- ↑ Upgrading from AngularJS to Angular. In: angular.io. Abgerufen am 18. Mai 2020 (englisch).
- ↑ Typed JavaScript at Any Scale. Abgerufen am 18. Mai 2020 (englisch).
- ↑ TypeScript abstract class. In: Qualified.One. 2. Dezember 2022, archiviert vom (nicht mehr online verfügbar) am 2. Dezember 2022; abgerufen am 7. März 2026 (englisch).
- ↑ a b Announcing TypeScript 0.9. 18. Juni 2013, abgerufen am 18. Mai 2020 (amerikanisches Englisch).
- ↑ Handbook - Generics. Abgerufen am 18. Mai 2020 (englisch).
- ↑ Handbook - Unions and Intersection Types. In: typescriptlang.org. Abgerufen am 30. November 2020 (englisch).
- ↑ Marius Schulz: Tagged Union Types in TypeScript. 3. November 2016, abgerufen am 4. Januar 2024 (amerikanisches Englisch).
- ↑ Sönke Sothmann: An introduction to TypeScript's module system. In: blog.oio.de. 31. Januar 2014, archiviert vom (nicht mehr online verfügbar) am 1. Februar 2014; abgerufen am 21. Februar 2014 (englisch).
- ↑ Scott Hanselman: What is TypeScript and why with Anders Hejlsberg. Abgerufen am 18. Mai 2020 (englisch).
- ↑ kexugit: TypeScript: JavaScript Development at Application Scale. Abgerufen am 18. Mai 2020 (amerikanisches Englisch).
- ↑ TypeScript 1.7. In: typescriptlang.org. Abgerufen am 1. August 2019 (englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 3.0. 30. Juli 2018, abgerufen am 19. Januar 2021 (amerikanisches Englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 3.5. 29. Mai 2019, abgerufen am 19. Januar 2021 (amerikanisches Englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 3.6. 28. August 2019, abgerufen am 19. Januar 2021 (amerikanisches Englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 3.7. 5. November 2019, abgerufen am 2. März 2020 (amerikanisches Englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 3.8. 20. Februar 2020, abgerufen am 2. März 2020 (amerikanisches Englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 3.9. 12. Mai 2020, abgerufen am 14. Mai 2020 (amerikanisches Englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 4.0. 20. August 2020, abgerufen am 19. Januar 2021 (amerikanisches Englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 4.1. 19. November 2020, abgerufen am 19. Januar 2021 (amerikanisches Englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 4.2. 23. Februar 2021, abgerufen am 31. Mai 2022 (amerikanisches Englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 4.3. 26. Mai 2021, abgerufen am 31. Mai 2022 (amerikanisches Englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 4.4. 26. August 2021, abgerufen am 31. Mai 2022 (amerikanisches Englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 4.5. 17. November 2021, abgerufen am 31. Mai 2022 (amerikanisches Englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 4.6. 28. Februar 2022, abgerufen am 31. Mai 2022 (amerikanisches Englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 4.7. 24. Mai 2022, abgerufen am 31. Mai 2022 (amerikanisches Englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 4.8. 25. August 2022, abgerufen am 21. Oktober 2022 (amerikanisches Englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 4.9. 15. November 2022, abgerufen am 18. Juni 2023 (amerikanisches Englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 5.0. 16. März 2023, abgerufen am 18. Juni 2023 (amerikanisches Englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 5.1. 1. Juni 2023, abgerufen am 18. Juni 2023 (amerikanisches Englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 5.2. 23. August 2023, abgerufen am 10. Dezember 2025 (amerikanisches Englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 5.3. 20. November 2023, abgerufen am 10. Dezember 2025 (amerikanisches Englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 5.4. 6. März 2024, abgerufen am 10. Dezember 2025 (amerikanisches Englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 5.5. 20. Juni 2024, abgerufen am 12. Dezember 2025 (amerikanisches Englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 5.6. 9. September 2024, abgerufen am 12. Dezember 2025 (amerikanisches Englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 5.7. 22. November 2024, abgerufen am 12. Dezember 2025 (amerikanisches Englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 5.8. 28. Februar 2025, abgerufen am 12. Dezember 2025 (amerikanisches Englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 5.9. 1. August 2025, abgerufen am 12. Dezember 2025 (amerikanisches Englisch).
- ↑ Daniel Rosenwasser: Announcing TypeScript 6.0. 23. März 2026, abgerufen am 26. März 2026 (amerikanisches Englisch).
- ↑ Anders Hejlsberg: A 10x Faster TypeScript. 11. März 2025, abgerufen am 12. Dezember 2025 (amerikanisches Englisch).