Die Unternehmen Microsoft, Igalia und Bloomberg haben die Initiative ergriffen, einen Syntax zur expliziten Typdefinition in die JavaScript-Spezifikation aufzunehmen, der dem Syntax ähnelt, der in der Programmiersprache TypeScript verwendet wird. Derzeit ist der Prototyp der Änderungen, die für die Aufnahme in den ECMAScript-Standard vorgeschlagen wurden, zur vorläufigen Diskussion (Stage 0) vorgelegt. Bei der bevorstehenden Sitzung des TC39-Ausschusses im März ist geplant, zur ersten Phase der Prüfung des Vorschlags überzugehen und die Expertise der ECMA-Community einzubeziehen.
Die explizit angegebene Typinformation wird es ermöglichen, viele Entwicklungsfehler zu vermeiden, zusätzliche Optimierungstechniken zu nutzen, das Debugging zu vereinfachen und den Code leserlicher und einfacher für die Überarbeitung und Wartung durch Dritte zu machen. Die Unterstützung von Typen soll als optionale Möglichkeit umgesetzt werden – JavaScript-Engines und -Laufzeitumgebungen, die keine Typüberprüfung unterstützen, ignorieren die Typinformationsannotationen und verarbeiten den Code wie zuvor, wobei die Typinformationen als Kommentare betrachtet werden. Allerdings werden Typüberprüfungstools auf Basis der verfügbaren Informationen Fehler in Zusammenhang mit falscher Typverwendung identifizieren können.
Im Gegensatz zu den durch Kommentare in JSDoc definierten Typinformationen wird die direkte Angabe von Typen in den Variablendeklarationskonstrukten den Code übersichtlicher, verständlicher und einfacher editierbar machen. Zum Beispiel werden integrierte Entwicklungsumgebungen, die TypeScript unterstützen, sofort Fehler im typisierten JavaScript-Code hervorheben können, ohne zusätzliche Konvertierungen. Darüber hinaus ermöglicht die integrierte Typunterstützung die Ausführung von Programmen, die in typisierten Dialekten von JavaScript wie TypeScript und Flow geschrieben sind, ohne eine Transpilation von einer Sprache in eine andere.

Из типов предлагается добавить «string», «number» и «boolean», которые можно будет использовать при определении переменных, параметров функций, элементов объектов, полей классов, типизированных массивов («number[]»). Предлагается также обеспечить поддержку объединённых типов («string | number») и дженериков. let x: string; function add(a: number, b: number) { return a + b; } interface Person { name: string; age: number; } function foo<T>(x: T) { return x; } function foo(x: string | number): string | number { if (typeof x === number) { return x + 1 } else { return x + «!» } }
Quelle: opennet.ru
