Was ist TypeScript und warum sollte ich es anstelle von JavaScript verwenden?

Können Sie bitte beschreiben, was die TypeScript-Sprache ist?

Was kann sie, was JavaScript oder verfügbare Bibliotheken nicht können, was mir einen Grund geben würde, sie in Betracht zu ziehen?

Lösung

Ich habe diese Antwort ursprünglich geschrieben, als Typescript noch druckfrisch war. Fünf Jahre später ist dies ein guter Überblick, aber Lodewijks Antwort unten für mehr Tiefe

1000ft view...

[TypeScript][1] ist eine Obermenge von JavaScript, die vor allem optionale statische Typisierung, Klassen und Schnittstellen bietet. Einer der großen Vorteile besteht darin, dass IDEs eine reichhaltigere Umgebung für die Erkennung von häufigen Fehlern *während der Eingabe des Codes* bereitstellen können.

Um eine Vorstellung davon zu bekommen, was ich meine, sehen Sie sich Microsofts Einführungsvideo zu dieser Sprache an.

Für ein großes JavaScript-Projekt könnte die Einführung von TypeScript zu einer robusteren Software führen, die dennoch dort eingesetzt werden kann, wo eine normale JavaScript-Anwendung ausgeführt werden würde.

Die Sprache ist quelloffen, aber Sie erhalten die clevere Intellisense-Funktion während der Eingabe nur, wenn Sie eine unterstützte IDE verwenden. Ursprünglich war dies nur Microsofts Visual Studio (auch im Blogbeitrag von Miguel de Icaza erwähnt). Heutzutage bieten auch andere IDEs TypeScript-Unterstützung.

Gibt es andere ähnliche Technologien?

Es gibt [CoffeeScript][5], aber das dient wirklich einem anderen Zweck. IMHO bietet CoffeeScript Lesbarkeit für Menschen, aber TypeScript bietet auch tiefe Lesbarkeit für *Werkzeuge* durch seine optionale statische Typisierung (siehe diesen [aktuellen Blogbeitrag][6] für ein wenig mehr Kritik). Es gibt auch [Dart][7], aber das ist ein vollwertiger Ersatz für JavaScript (obwohl es [JavaScript-Code erzeugen kann][8])

Beispiel

Als Beispiel hier etwas TypeScript (Sie können damit auf dem TypeScript Playground spielen)

class Greeter {
    greeting: string;
    constructor (message: string) {
        this.greeting = message;
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}  

Und hier ist das JavaScript, das es erzeugen würde

var Greeter = (function () {
    function Greeter(message) {
        this.greeting = message;
    }
    Greeter.prototype.greet = function () {
        return "Hello, " + this.greeting;
    };
    return Greeter;
})();

Beachten Sie, wie TypeScript den Typ von Mitgliedsvariablen und Parametern von Klassenmethoden definiert. Dies wird bei der Übersetzung in JavaScript entfernt, aber von der IDE und dem Compiler verwendet, um Fehler zu erkennen, wie die Übergabe eines numerischen Typs an den Konstruktor.

Es ist auch in der Lage, Typen abzuleiten, die nicht explizit deklariert sind, z. B. würde es feststellen, dass die Methode Greet() einen String zurückgibt.

Typescript debuggen

Viele Browser und IDEs bieten direkte Debugging-Unterstützung durch Sourcecemaps. Siehe diese Stack Overflow Frage für weitere Details: [Debugging von TypeScript-Code mit Visual Studio][10]

Wollen Sie mehr wissen?

Ich habe diese Antwort ursprünglich geschrieben, als Typescript noch brandaktuell war. In [Lodewijks Antwort][11] auf diese Frage finden Sie weitere aktuelle Details.
Kommentare (28)

Die Beziehung von TypeScript zu JavaScript

TypeScript ist eine typisierte Obermenge von JavaScript, die sich zu einfachem JavaScript kompilieren lässt. JavaScript - typescriptlang.org. JavaScript ist eine Programmiersprache, die von EMCA's Technical Committee 39 entwickelt wird, einer Gruppe von Personen, die sich aus vielen verschiedenen Interessengruppen zusammensetzt. TC39 ist ein Ausschuss, der von ECMA, einer internen Normungsorganisation, betreut wird. JavaScript wird von vielen verschiedenen Anbietern implementiert (z. B. Google, Microsoft, Oracle usw.). Das Ziel von JavaScript ist es, die Lingua Franca des Webs zu werden. TypeScript ist eine Obermenge der JavaScript-Sprache, die einen einzigen Open-Source-Compiler hat und hauptsächlich von einem einzigen Anbieter entwickelt wird: Microsoft. Das Ziel von TypeScript ist es, durch ein Typsystem Fehler frühzeitig zu erkennen und die JavaScript-Entwicklung effizienter zu machen. Im Wesentlichen erreicht TypeScript seine Ziele auf drei Arten:

  1. Unterstützung für moderne JavaScript-Funktionen - Die JavaScript-Sprache (nicht die Laufzeit) ist durch die ECMAScript-Standards standardisiert. Nicht alle Browser und JavaScript-Laufzeiten unterstützen alle Funktionen aller ECMAScript-Standards (siehe diesen Überblick). TypeScript ermöglicht die Verwendung vieler der neuesten ECMAScript-Funktionen und übersetzt sie in ältere ECMAScript-Ziele Ihrer Wahl (siehe die Liste der Kompilierziele unter der Compileroption --target). Das bedeutet, dass Sie neue Funktionen wie Module, Lambda-Funktionen, Klassen, den Spread-Operator und Destrukturierung sicher nutzen können, während Sie mit älteren Browsern und JavaScript-Laufzeiten abwärtskompatibel bleiben.
  2. Erweitertes Typsystem - Die Typunterstützung ist nicht Teil des ECMAScript-Standards und wird es aufgrund der interpretierten und nicht kompilierten Natur von JavaScript wahrscheinlich auch nie werden. Das Typsystem von TypeScript ist unglaublich reichhaltig und umfasst: Schnittstellen, Enums, hybride Typen, Generics, Union/Schnittstellen-Typen, Zugriffsmodifikatoren und vieles mehr. Die offizielle Website von TypeScript gibt einen Überblick über diese Funktionen. Das Typsystem von TypeScript kann mit den meisten anderen typisierten Sprachen mithalten und ist in einigen Fällen wohl sogar leistungsfähiger.
  3. Unterstützung für Entwickler-Tools - TypeScripts Compiler kann als Hintergrundprozess laufen, um sowohl die inkrementelle Kompilierung als auch die IDE-Integration zu unterstützen, so dass Sie einfacher navigieren, Probleme identifizieren, Möglichkeiten prüfen und Ihre Codebasis refaktorisieren können.

    Die Beziehung von TypeScript zu anderen JavaScript-Zielsprachen

    TypeScript hat eine einzigartige Philosophie im Vergleich zu anderen Sprachen, die zu JavaScript kompilieren. JavaScript-Code ist gültiger TypeScript-Code; TypeScript ist ein Superset von JavaScript. Sie können Ihre "js"-Dateien praktisch in "ts"-Dateien umbenennen und TypeScript verwenden (siehe "JavaScript-Interoperabilität" unten). TypeScript-Dateien werden zu lesbarem JavaScript kompiliert, so dass eine Migration zurück möglich ist und das Verständnis des kompilierten TypeScript nicht schwierig ist. TypeScript baut auf den Erfolgen von JavaScript auf und verbessert gleichzeitig dessen Schwächen. Auf der einen Seite gibt es zukunftssichere Tools, die moderne ECMAScript-Standards verwenden und sie in ältere JavaScript-Versionen kompilieren, wobei Babel das beliebteste ist. Auf der anderen Seite gibt es Sprachen, die sich völlig von JavaScript unterscheiden und auf JavaScript abzielen, wie CoffeeScript, Clojure, Dart, Elm, Haxe, Scala.js und eine ganze Reihe weiterer Sprachen (siehe diese Liste). Diese Sprachen könnten zwar besser sein als die Zukunft von JavaScript, laufen aber Gefahr, nicht genügend Akzeptanz zu finden, um ihre Zukunft zu sichern. Es könnte auch schwieriger sein, erfahrene Entwickler für einige dieser Sprachen zu finden, obwohl die, die man findet, oft enthusiastischer sind. Die Interoperabilität mit JavaScript kann auch etwas komplizierter sein, da sie weiter von JavaScript entfernt sind. TypeScript liegt zwischen diesen beiden Extremen und gleicht somit das Risiko aus. TypeScript ist auf keinen Fall eine riskante Wahl. Wenn Sie mit JavaScript vertraut sind, ist die Eingewöhnung sehr einfach, da es sich nicht um eine völlig andere Sprache handelt, die Interoperabilität mit JavaScript hervorragend unterstützt wird und in letzter Zeit sehr viel Verbreitung gefunden hat.

    Optionale statische Typisierung und Typinferenz

    JavaScript ist dynamisch typisiert. Das bedeutet, dass JavaScript nicht weiß, welchen Typ eine Variable hat, bis sie tatsächlich zur Laufzeit instanziiert wird. Das bedeutet auch, dass es zu spät sein kann. TypeScript fügt JavaScript Typunterstützung hinzu. Fehler, die durch die falsche Annahme verursacht werden, dass eine Variable von einem bestimmten Typ ist, können vollständig beseitigt werden, wenn man seine Karten richtig ausspielt (wie streng man seinen Code tippt oder ob man ihn überhaupt tippt, bleibt jedem selbst überlassen). TypeScript macht die Typisierung ein wenig einfacher und viel weniger explizit durch die Verwendung von Typinferenz. Zum Beispiel: var x = "hallo" in TypeScript ist das gleiche wie var x : string = "hallo". Der Typ wird einfach aus seiner Verwendung abgeleitet. Selbst wenn Sie die Typen nicht explizit typisieren, sind sie immer noch da, um Sie davor zu bewahren, etwas zu tun, was sonst zu einem Laufzeitfehler führen würde. TypeScript ist standardmäßig optional typisiert. Zum Beispiel ist function divideByTwo(x) { return x / 2 } eine gültige Funktion in TypeScript, die mit jedem Parameter aufgerufen werden kann, auch wenn der Aufruf mit einer Zeichenkette natürlich zu einem Laufzeitfehler führt. Genau wie Sie es von JavaScript gewohnt sind. Das funktioniert, weil TypeScript, wenn kein Typ explizit zugewiesen wurde und der Typ nicht abgeleitet werden konnte, wie im divideByTwo-Beispiel, implizit den Typ any zuweist. Das bedeutet, dass die Typsignatur der divideByTwo-Funktion automatisch zu function divideByTwo(x : any) : any wird. Es gibt ein Compiler-Flag, um dieses Verhalten zu unterbinden: --noImplicitAny. Das Aktivieren dieses Flags gibt Ihnen ein größeres Maß an Sicherheit, bedeutet aber auch, dass Sie mehr tippen müssen. Typen haben einen Preis, der mit ihnen verbunden ist. Erstens gibt es eine Lernkurve, und zweitens kostet es natürlich auch etwas mehr Zeit, eine Codebasis unter Verwendung der richtigen strengen Typisierung einzurichten. Meiner Erfahrung nach sind diese Kosten bei jeder ernsthaften Codebasis, die Sie mit anderen teilen, absolut lohnenswert. A Large Scale Study of Programming Languages and Code Quality in Github legt nahe, dass "statisch typisierte Sprachen im Allgemeinen weniger fehleranfällig sind als dynamische Typen, und dass starke Typisierung in dieser Hinsicht besser ist als schwache Typisierung". Interessanterweise wird in demselben Papier festgestellt, dass TypeScript weniger fehleranfällig ist als JavaScript: Für diejenigen mit positiven Koeffizienten können wir erwarten, dass die Sprache ceteris paribus mit einer größeren Anzahl von Fehlerbehebungen verbunden ist. Zu diesen Sprachen gehören C, C++, JavaScript, Objective-C, Php, und Python. Die Sprachen Clojure, Haskell, Ruby, Scala und TypeScript, haben alle negative Koeffizienten, was bedeutet, dass diese Sprachen weniger weniger wahrscheinlich sind, dass diese Sprachen zu fehlerbehebenden Übertragungen führen als der Durchschnitt.

    Verbesserte IDE-Unterstützung

    Die Entwicklungserfahrung mit TypeScript ist eine große Verbesserung gegenüber JavaScript. Die IDE wird in Echtzeit vom TypeScript-Compiler über dessen umfangreiche Typinformationen informiert. Dies bringt eine Reihe von Vorteilen mit sich. Mit TypeScript können Sie zum Beispiel Refactorings wie Umbenennungen in Ihrer gesamten Codebasis sicher durchführen. Durch die Code-Vervollständigung erhalten Sie Inline-Hilfe zu allen Funktionen, die eine Bibliothek bietet. Sie müssen sich nicht mehr an sie erinnern oder sie in Online-Referenzen nachschlagen. Kompilierungsfehler werden direkt in der IDE mit einer roten, verschnörkelten Linie angezeigt, während Sie mit dem Programmieren beschäftigt sind. Alles in allem bedeutet dies einen erheblichen Produktivitätszuwachs im Vergleich zur Arbeit mit JavaScript. Man kann mehr Zeit mit dem Programmieren und weniger Zeit mit der Fehlersuche verbringen. Es gibt eine ganze Reihe von IDEs mit hervorragender Unterstützung für TypeScript, wie Visual Studio Code, WebStorm, Atom und Sublime.

    Strenge Null-Prüfungen

    Laufzeitfehler der Form kann Eigenschaft 'x' von undefined nicht lesen oder undefined ist keine Funktion werden sehr häufig von Fehlern in JavaScript-Code verursacht. TypeScript reduziert bereits von Haus aus die Wahrscheinlichkeit, dass diese Art von Fehlern auftritt, da man keine Variable verwenden kann, die dem TypeScript-Compiler nicht bekannt ist (mit Ausnahme von Eigenschaften von "beliebig" typisierten Variablen). Es ist aber immer noch möglich, fälschlicherweise eine Variable zu verwenden, die auf undefined gesetzt ist. Mit der Version 2.0 von TypeScript können Sie diese Art von Fehlern jedoch durch die Verwendung von nicht-nullbaren Typen vollständig ausschließen. Dies funktioniert wie folgt: Bei aktivierter strikter Null-Prüfung (Compiler-Flag --strictNullChecks) lässt der TypeScript-Compiler nicht zu, dass einer Variablen undefined zugewiesen wird, es sei denn, Sie deklarieren sie explizit als nullbaren Typ. Zum Beispiel wird let x : number = undefined zu einem Kompilierfehler führen. Dies passt perfekt zur Typentheorie, da undefined keine Zahl ist. Man kann x als Summentyp von Zahl und Undefiniert definieren, um dies zu korrigieren: Let x : number | undefined = undefined". Sobald bekannt ist, dass ein Typ nullbar ist, d.h. dass er von einem Typ ist, der auch den Wert null oder undefined haben kann, kann der TypeScript-Compiler durch kontrollflussbasierte Typanalyse feststellen, ob Ihr Code eine Variable sicher verwenden kann oder nicht. Mit anderen Worten, wenn Sie prüfen, ob eine Variable "undefiniert" ist, z.B. durch eine "if"-Anweisung, wird der TypeScript-Compiler ableiten, dass der Typ in diesem Zweig des Kontrollflusses Ihres Codes nicht mehr nullbar ist und daher sicher verwendet werden kann. Hier ist ein einfaches Beispiel:

let x: number | undefined;
if (x !== undefined) x += 1; // this line will compile, because x is checked.
x += 1; // this line will fail compilation, because x might be undefined.

Während der Build-Konferenz 2016 gab Anders Hejlsberg, Mitentwickler von TypeScript, eine detaillierte Erklärung und Demonstration dieser Funktion: Video (von 44:30 bis 56:30).

Kompilierung

Um TypeScript zu verwenden, benötigen Sie einen Build-Prozess, um JavaScript-Code zu kompilieren. Der Build-Prozess dauert im Allgemeinen nur ein paar Sekunden, was natürlich von der Größe Ihres Projekts abhängt. Der TypeScript-Compiler unterstützt die inkrementelle Kompilierung (--watch Compiler-Flag), so dass alle nachfolgenden Änderungen mit höherer Geschwindigkeit kompiliert werden können. Der TypeScript-Compiler kann Source-Map-Informationen in die generierten .js-Dateien einbinden oder separate .map-Dateien erstellen. Source-Map-Informationen können von Debugging-Programmen wie den Chrome DevTools und anderen IDEs verwendet werden, um die Zeilen im JavaScript mit den Zeilen zu verknüpfen, die sie im TypeScript erzeugt haben. Dadurch können Sie Haltepunkte setzen und Variablen während der Laufzeit direkt in Ihrem TypeScript-Code überprüfen. Source-Map-Informationen funktionieren ziemlich gut, es gab sie schon lange vor TypeScript, aber das Debugging von TypeScript ist im Allgemeinen nicht so gut wie bei der direkten Verwendung von JavaScript. Nehmen Sie zum Beispiel das Schlüsselwort this. Aufgrund der geänderten Semantik des this-Schlüsselworts im Zusammenhang mit Closures seit ES2015 kann this während der Laufzeit tatsächlich als Variable namens _this existieren (siehe diese Antwort). Das kann beim Debuggen verwirren, ist aber in der Regel kein Problem, wenn man es weiß oder den JavaScript-Code inspiziert. Es ist anzumerken, dass Babel unter genau demselben Problem leidet. Es gibt noch ein paar andere Tricks, die der TypeScript-Compiler beherrscht, wie z.B. das Generieren von Abfangcode auf der Basis von decorators, das Generieren von Modulladecode für verschiedene Modulsysteme und das Parsen von JSX. Wahrscheinlich werden Sie jedoch neben dem Typescript-Compiler noch ein weiteres Build-Tool benötigen. Wenn Sie zum Beispiel Ihren Code komprimieren wollen, müssen Sie Ihrem Build-Prozess weitere Tools hinzufügen, um dies zu tun. Es gibt TypeScript-Kompilierungs-Plugins für Webpack, Gulp, Grunt und so ziemlich jedes andere JavaScript-Build-Tool, das es gibt. Die TypeScript-Dokumentation hat einen Abschnitt über Integration mit Build-Tools, der sie alle abdeckt. Ein Linter ist ebenfalls verfügbar, falls Sie noch mehr Build-Zeitkontrolle wünschen. Es gibt auch eine große Anzahl von Startprojekten, die Ihnen den Einstieg in TypeScript in Kombination mit einer Reihe anderer Technologien wie Angular 2, React, Ember, SystemJS, Webpack, Gulp usw. ermöglichen.

JavaScript-Interoperabilität

Da TypeScript so eng mit JavaScript verwandt ist, bietet es großartige Interoperabilitätsmöglichkeiten, aber es ist etwas zusätzliche Arbeit erforderlich, um mit JavaScript-Bibliotheken in TypeScript zu arbeiten. TypeScript-Definitionen werden benötigt, damit der TypeScript-Compiler versteht, dass Funktionsaufrufe wie _.groupBy oder angular.copy oder $.fadeOut nicht tatsächlich illegale Anweisungen sind. Die Definitionen für diese Funktionen werden in .d.ts-Dateien abgelegt. Die einfachste Form einer Definition besteht darin, dass ein Bezeichner in beliebiger Weise verwendet werden kann. Wenn Sie zum Beispiel Lodash verwenden, können Sie mit einer einzeiligen Definitionsdatei declare var _ : any jede beliebige Funktion für _ aufrufen, aber natürlich können Sie dabei auch Fehler machen: __.foobar()` wäre ein legaler TypeScript-Aufruf, ist aber natürlich zur Laufzeit ein illegaler Aufruf. Wenn Sie korrekte Typunterstützung und Code-Vervollständigung wollen, muss Ihre Definitionsdatei genauer sein (siehe lodash definitions für ein Beispiel). Npm-Module, die mit ihren eigenen Typdefinitionen geliefert werden, werden vom TypeScript-Compiler automatisch verstanden (siehe Dokumentation). Für so ziemlich jede andere semi-populäre JavaScript-Bibliothek, die keine eigenen Definitionen enthält, hat jemand bereits Typdefinitionen durch ein anderes npm-Modul zur Verfügung gestellt. Diese Module sind mit dem Präfix "@types/" versehen und stammen aus einem Github-Repository namens DefinitelyTyped. Es gibt eine Einschränkung: Die Typdefinitionen müssen mit der Version der Bibliothek übereinstimmen, die Sie zur Laufzeit verwenden. Wenn dies nicht der Fall ist, kann TypeScript den Aufruf einer Funktion oder die Dereferenzierung einer Variablen, die bereits vorhanden ist, verweigern oder den Aufruf einer Funktion oder die Dereferenzierung einer Variablen, die nicht vorhanden ist, zulassen, einfach weil die Typen zur Kompilierungszeit nicht mit der Laufzeit übereinstimmen. Stellen Sie also sicher, dass Sie die richtige Version der Typdefinitionen für die richtige Version der von Ihnen verwendeten Bibliothek laden. Um ehrlich zu sein, ist dies etwas umständlich, und es könnte einer der Gründe sein, warum Sie sich nicht für TypeScript entscheiden, sondern stattdessen etwas wie Babel verwenden, bei dem Sie überhaupt keine Typdefinitionen benötigen. Andererseits können Sie, wenn Sie wissen, was Sie tun, alle Probleme, die durch falsche oder fehlende Definitionsdateien verursacht werden, leicht überwinden.

Konvertierung von JavaScript zu TypeScript

Jede "js"-Datei kann in eine "ts"-Datei umbenannt und durch den TypeScript-Compiler laufen gelassen werden, um syntaktisch den gleichen JavaScript-Code als Ausgabe zu erhalten (wenn er überhaupt syntaktisch korrekt war). Selbst wenn der TypeScript-Compiler Kompilierungsfehler erhält, wird er immer noch eine .js'-Datei erzeugen. Er kann sogar.js-Dateien als Eingabe mit dem--allowJs-Flag akzeptieren. Dies ermöglicht es Ihnen, sofort mit TypeScript zu arbeiten. Leider werden am Anfang wahrscheinlich Kompilierungsfehler auftreten. Man muss jedoch bedenken, dass es sich dabei nicht um spektakuläre Fehler handelt, wie man sie vielleicht von anderen Compilern gewohnt ist. Die Kompilierungsfehler, die anfangs bei der Konvertierung eines JavaScript-Projekts in ein TypeScript-Projekt auftreten, sind aufgrund der Natur von TypeScript unvermeidbar. TypeScript prüft *allen* Code auf Gültigkeit und muss daher über alle verwendeten Funktionen und Variablen Bescheid wissen. Daher müssen für alle Funktionen und Variablen Typdefinitionen vorhanden sein, sonst sind Kompilierungsfehler vorprogrammiert. Wie im obigen Kapitel erwähnt, gibt es für so ziemlich jedes JavaScript-Framework.d.ts'-Dateien, die leicht mit der Installation von DefinitelyTyped-Paketen erworben werden können. Es könnte jedoch sein, dass Sie eine obskure Bibliothek verwendet haben, für die keine TypeScript-Definitionen verfügbar sind, oder dass Sie einige JavaScript-Primitive polyfilled haben. In diesem Fall müssen Sie Typdefinitionen für diese Bits bereitstellen, damit die Kompilierungsfehler verschwinden. Erstellen Sie einfach eine .d.ts-Datei und fügen Sie sie in das Array files der tsconfig.json ein, so dass sie vom TypeScript-Compiler immer berücksichtigt wird. Darin deklarieren Sie die Bits, die TypeScript nicht kennt, als Typ any. Sobald Sie alle Fehler beseitigt haben, können Sie nach und nach die Typisierung für diese Teile nach Ihren Bedürfnissen einführen. Um TypeScript in die Build-Pipeline einzubinden, sind auch einige Arbeiten zur (Neu-)Konfiguration der Build-Pipeline erforderlich. Wie im Kapitel über Kompilierung erwähnt, gibt es viele gute Ressourcen, und ich empfehle Ihnen, nach Startprojekten zu suchen, die die Kombination von Tools verwenden, mit denen Sie arbeiten möchten. Die größte Hürde ist die Lernkurve. Ich empfehle Ihnen, zunächst mit einem kleinen Projekt herumzuspielen. Sehen Sie sich an, wie es funktioniert, wie es gebaut wird, welche Dateien es verwendet, wie es konfiguriert ist, wie es in Ihrer IDE funktioniert, wie es strukturiert ist, welche Tools es verwendet usw. Die Konvertierung einer großen JavaScript-Codebasis nach TypeScript ist machbar, wenn Sie wissen, was Sie tun. Lesen Sie zum Beispiel diesen Blog über die Konvertierung von 600k Zeilen nach TypeScript in 72 Stunden). Stellen Sie einfach sicher, dass Sie die Sprache gut beherrschen, bevor Sie den Sprung wagen.

Verabschiedung

TypeScript ist Open-Source (Apache 2 lizenziert, siehe GitHub) und wird von Microsoft unterstützt. Anders Hejlsberg, der leitende Architekt von C#, steht an der Spitze des Projekts. Es ist ein sehr aktives Projekt; das TypeScript-Team hat in den letzten Jahren viele neue Funktionen veröffentlicht und es sind noch viele weitere geplant (siehe die Roadmap). Einige Fakten zur Akzeptanz und Popularität:

  • In der 2017 StackOverflow-Entwicklerumfrage war TypeScript der beliebteste JavaScript-Transpiler (Platz 9 insgesamt) und belegte den dritten Platz in der Kategorie "Beliebteste Programmiersprache".
  • In der 2018 state of js survey wurde TypeScript zu einem der beiden großen Gewinner in der Kategorie JavaScript-Flavors erklärt (mit ES6 als dem anderen).
  • In der 2019 StackOverlow deverloper survey stieg TypeScript auf Platz 9 der beliebtesten Sprachen unter professionellen Entwicklern auf und überholte damit sowohl C als auch C++. Es belegte wiederum den dritten Platz unter den beliebtesten Sprachen.
Kommentare (10)

"TypeScript Fundamentals" - ein Pluralsight-Videokurs von Dan Wahlin und John Papa ist eine wirklich gute, derzeit (25. März 2016) auf TypeScript 1.8 aktualisierte, Einführung in Typescript.

Für mich sind die wirklich guten Features, neben den netten Möglichkeiten für Intellisense, die Klassen, Schnittstellen, Module, die Einfachheit der Implementierung von AMD und die Möglichkeit, den Visual Studio Typescript Debugger zu verwenden, wenn er mit IE aufgerufen wird.

Zusammenfassend: Wenn es wie beabsichtigt eingesetzt wird, kann Typescript die JavaScript-Programmierung zuverlässiger und einfacher machen. Es kann die Produktivität des JavaScript-Programmierers während des gesamten SDLC erheblich steigern.

Kommentare (3)