ECMAScript 6 での静的型付けのサポートはありますか? ECMAScript 7 はどうですか?
5 に答える
いいえ。
しかし、ECMA-Script Wikipage には、ECMA-Script 7 の変更点に関する段落があります。
第 7 版は開発の非常に初期の段階にありますが、言語の改革、コードの分離、効果の制御、ES6 からのライブラリ/ツールの有効化のテーマを継続することを目的としています。提案された新機能には、promise/concurrency、数値と数学の拡張、ガードと商標 (静的型付けの代替)、演算子のオーバーロード、値の型 (ファーストクラスの数値のようなオブジェクト)、新しいレコード構造 (レコード、タプル、および型付き配列) が含まれます。 、パターン マッチング、および特性。
興味があるかもしれません。
これは ES6 仕様の一部ではありませんが、Closure Compilerは Advanced コンパイル レベルを使用する場合、JavaScript コードで JSDoc 引数型の注釈を適用します。型注釈はコメントを使用して指定されるため、開発では無視されますが、製品リリース用にアプリをビルドすると、型の不一致によりコンパイラの警告が発生するか、必要に応じてコンパイラ エラーが発生します。
強制された JSDoc 型注釈の例:
/**
* @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
おまけとして、JSDoc はこれと同じ構文を使用して API ドキュメントを作成できます。そのため、コードを文書化する場合にも便利です。
ただし、警告: Closure Compiler が高度な最適化マジックを実行するには、プロジェクトのすべてのエンジニアが特定の厳密なコーディング規則に従う必要があります。コンパイラは、コードが何を行っているかを確実に把握できない限り、型を強制することはできません。つまり、JavaScript の動的で希望に満ちた構文の一部を放棄することを意味します。これらに従わないと、エラーがアプリに忍び込み、事後の診断が非常に難しくなる可能性があります。コンパイラの externs 機能を使用して回避できる場合もありますが、最も一般的な JavaScript フレームワークとライブラリはそれらに従っていません。(たとえば、externs を使用して jQuery がサポートされます。)
そのため、使用する場合は、アプリを徹底的にテストしてください。個人的には、Jenkins ビルド ボットと、最適化後にコードに対して実行できるほぼ 100% の自動化されたテスト カバレッジがない限り、Web アプリでこの機能を使用することを検討しません。これは大変な作業であり、万人向けではありません。プロジェクトの 1 つをそのレベルまで上げるのに数か月かかりました。しかし、個人的には、努力する価値は十分にあると思います。
詳細については、Advanced Compilation and ExternsおよびAnnotating JavaScript for the Closure Compiler を参照してください。
いいえ、どちらの ECMAScript 6 (ES2015) でも静的型付けはサポートされていません。
ECMAScript 7 (ES2016) に関しては、ステージ1、2、3、4、またはステージ 0のいずれにも静的型付けの提案はありません。
es-discussメーリング リストにいくつかの静的型付けの提案/アイデアが表示されているのを見てきましたが、これらのいずれも実際には ES7 (ES2016) に対して提案されていません。
今すぐ静的型付けが必要な場合は、おそらく TypeScript または Flow を検討するのが最適です。
純粋な ES6 ではありませんが、Google の AtScript は型注釈を使用して ES6 を拡張し、コンパイラが公開されると有効な ES6 コードにコンパイルします: AtScript プライマー
オプションとして、EsLint プラグインhttps://github.com/yarax/typelintを見ることができます
これは静的チェックではありませんが、オプションです。TypeLint の利点は、複雑な型を自分で記述しなければならない TypeScript や Flow とは異なり、既存のアプリ データを使用して型を自動的に構築および使用できることです。