web-dev-qa-db-ja.com

ECMAScript 6または7で静的型付けのサポートはありますか?

ECMAScript 6で静的型付けのサポートはありますか? ECMAScript 7はどうですか?

28
Mojtaba

番号。

ただし、ECMA-Script Wikiページには、ECMA-Script 7の変更に関する段落があります。

第7版は開発のごく初期の段階ですが、言語の改革、コードの分離、エフェクトの制御、ES6からのライブラリ/ツールの有効化のテーマを継続することを目的としています。提案された新機能には、promise/concurrency、数値と数学の強化、ガード、および商標(静的型付けの代替)、演算子のオーバーロード、値の型(ファーストクラスの数値のようなオブジェクト)、新しいレコード構造(レコード、タプルと型付き配列)、パターンマッチング、および特性。

興味があるかもしれません。

16

これはES6仕様の一部ではありませんが、 Closure Compiler は、高度なコンパイルレベルを使用するときに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の動的で希望通りの構文の一部を放棄することになります。従わないと、エラーがアプリに侵入し、事後に診断するのが非常に困難になる可能性があります。ほとんどの一般的なJavaScriptフレームワークおよびライブラリはそれらに準拠していませんが、コンパイラーのexterns機能を使用して回避できる場合があります。 (たとえば、jQueryはexternsを使用してサポートされます。)

したがって、それを使用する場合は、アプリを完全にテストしてください。 Jenkinsビルドボットと、コードに対して実行できる100%に近い自動テストカバレッジが実行された後でない限り、私は個人的にWebアプリでこの機能を使用することさえ考えません。最適化されました。これは大変な作業であり、すべての人に適しているわけではありません。自分のプロジェクトの1つをそのレベルまで上げるのに数か月かかりました。しかし個人的には、努力する価値は十分にあると思います。

詳細については、 高度なコンパイルとExterns および クロージャコンパイラのJavaScriptに注釈を付ける を確認してください。

6

いいえ、どちらのECMAScript 6(ES2015)でも静的型付けはサポートされていません。

ECMAScript 7(ES2016)に関しては、静的型付けの ステージ1、2、3、4 または ステージ の提案はありません。

es-discuss メーリングリストに静的型付けに関するいくつかの提案/アイデアが表示されるのを見ましたが、これらのどれも実際にはES7(ES2016)に対して提案されていません。

静的なタイピングが今必要な場合は、TypeScriptまたはFlowを調べるのが最善でしょう。

2
Thomas Foster

それは純粋なES6ではありませんが、GoogleのAtScriptは型注釈でES6を拡張し、コンパイラが公開されると有効なES6コードにコンパイルされます。 AtScript Primer

0
NagyI

オプションとして、EsLintプラグインを確認することができます https://github.com/yarax/typelint

これは静的チェックではなく、オプションです。 TypeLintの利点は、既存のアプリデータを使用してタイプを自動的に構築および使用することです。たとえば、TypeScriptやFlowとは異なり、複雑なタイプを自分で記述する必要があります。

0
Rax Wunter