web-dev-qa-db-de.com

Gibt es Unterstützung für die statische Typisierung in ECMAScript 6 oder 7?

Gibt es Unterstützung für die statische Typisierung in ECMAScript 6? Wie wäre es mit ECMAScript 7?

26
Mojtaba

Nein.

Auf der ECMA-Script-Wikipage gibt es jedoch einen Absatz zu Änderungen in ECMA-Script 7:

Die siebte Ausgabe befindet sich in einem sehr frühen Entwicklungsstadium, soll jedoch die Themen Sprachenreform, Code-Isolation, Effektkontrolle und Bibliotheks-/Tool-Aktivierung von ES6 fortsetzen. Zu den vorgeschlagenen neuen Funktionen gehören Versprechen/Nebenläufigkeit, Anzahl und mathematische Verbesserungen, Schutz und Marken (eine Alternative zur statischen Typisierung) , Überladen von Operatoren, Werttypen (erstklassige nummerartige Objekte), neue Datensatzstrukturen (Datensätze, Tupel) und typisierte Arrays), Musterabgleich und Merkmale.

Was dich interessieren könnte.

16

Obwohl dies nicht Teil der ES6-Spezifikation ist, erzwingt Closure Compiler die Verwendung von JSDoc-Argumenttypanmerkungen im JavaScript-Code, wenn die erweiterte Kompilierungsstufe Advanced verwendet wird. Typanmerkungen werden mithilfe von Kommentaren angegeben, sodass sie bei der Entwicklung ignoriert werden. Wenn Sie jedoch Ihre App für eine Produktionsversion erstellen, führt ein Typkonflikt zu einer Compiler-Warnung oder optional zu einem Compiler-Fehler.

Ein Beispiel für eine erzwungene JSDoc-Annotation:

/**
 * @param {string} stringValue
 * @return {number}
 */
function toInt(stringValue) {
  return parseInt(stringValue, 10);
}

var val = toInt("10"); // Good
var val = toInt(false); // NaN in development, but throws an error (optional) 
                        // or prints a warning (default) at build time

Als zusätzlichen Bonus kann JSDoc API-Dokumentation mit derselben Syntax erstellen. So ist es auch praktisch, wenn Sie Ihren Code dokumentieren.

Aber eine Warnung: Damit Closure Compiler seine fortschrittliche Optimierungsmagie ausführen kann, muss jeder Ingenieur in Ihrem Projekt bestimmten strengen Codierungskonventionen folgen. Der Compiler kann Typen nicht erzwingen, es sei denn, er kann zuverlässig herausfinden, was Ihr Code tut. Das bedeutet, dass Sie einige der dynamischen und verwaschenen Syntax von JavaScript aufgeben müssen. Wenn Sie ihnen nicht folgen, können sich Fehler in Ihre App einschleichen und sie können danach schwer diagnostiziert werden. Die meisten gängigen JavaScript-Frameworks und -Bibliotheken folgen ihnen nicht, obwohl Sie dies manchmal mit der externen Funktion von Compiler umgehen können. (jQuery wird beispielsweise über externe Geräte unterstützt.)

Wenn Sie es also verwenden, stellen Sie sicher, dass Sie Ihre App gründlich testen. Ich persönlich würde die Verwendung dieser Funktion für eine Web-App nicht in Betracht ziehen, es sei denn, sie verfügt über einen Jenkins-Build-Bot und eine nahezu 100% ige automatisierte Testabdeckung, die für Ihren Code ausgeführt werden kann. After sie wurde optimiert. Das ist viel Arbeit und ist nicht für jeden etwas; Ich habe Monate gebraucht, um eines meiner Projekte auf dieses Niveau zu bringen. Aber persönlich finde ich die Mühe wert.

Weitere Informationen finden Sie unter Erweiterte Kompilierung und Externs und JavaScript für den Closure Compiler kommentieren.

5

Nein, die statische Typisierung wird in ECMAScript 6 (ES2015) nicht unterstützt.

Für ECMAScript 7 (ES2016) gibt es keinen Vorschlag für Stufen 1, 2, 3, 4 oder Stufe für die statische Typisierung.

Ich habe auf der Mailingliste es-discussion einige Vorschläge/Ideen für die statische Typisierung gesehen, von denen jedoch keines für ES7 (ES2016) vorgeschlagen wurde.

Wenn Sie jetzt statische Texte eingeben möchten, sollten Sie sich am besten mit TypeScript oder Flow befassen.

2
Thomas Foster

Obwohl es kein reines ES6 ist, erweitert Google AtScript ES6 mit Typanmerkungen und kompiliert es in gültigen ES6-Code, sobald der Compiler öffentlich wird: AtScript-Primer

0
NagyI

Als Option können Sie einen Blick auf das EsLint-Plugin https://github.com/yarax/typelint werfen.

Es ist keine statische Überprüfung, sondern optional. Der Vorteil von TypeLint besteht darin, dass bereits vorhandene App-Daten zum automatischen Erstellen und Verwenden von Typen verwendet werden. Im Gegensatz zu TypeScript oder Flow müssen Sie komplexe Typen selbst beschreiben.

0
Rax Wunter