2017-06-06 8 views
0

私は、ジェネレータやオブジェクトスプレッドなどの最新のES6 +機能を利用するTypescript/React/Reduxアプリケーションを作成しています。babel-polyfillを使用している場合、TypescriptでES6を対象にできますか?

私の現在のtsconfig.jsonターゲットはES5に設定されており、私のアプリケーションにはbabel-polyfillも含まれています。

ほとんどのブラウザでES6がES5よりもfasterであるため、私はTypescript設定からES6をターゲットにすることをお勧めします。しかし、私は多くのブラウザをサポートすることができなくなると懸念しています。

babel-polyfillはES5ターゲットへのトランスリングと同じレベルのES5サポートを提供しますか?

+0

polyfillはes5ターゲットとともに使用されることになっています。代わりにではありません。私はリンクがes6がes5よりも速いことを示しているかどうかはわかりません。いずれにしても、この問題は時期尚早の最適化と見なすことができます。 – estus

答えて

4

babel-polyfillは、ES5ターゲットと同じレベルのES5サポートを提供しますか?

babel-polyfill行方不明ES6 ランタイムクラスとメソッドを追加します。たとえば、スクリプトを実行しているブラウザにPromiseまたはArray.prototype.includesがない場合、それらの実装がグローバルスコープに追加され、コードがそれらを使用しようとするときに存在するようになります。

ブラウザにES6 の構文のサポートを追加できません。 JavaScriptコードにES6構文が含まれている場合(class...、またはyield)、のコードを解析するには、のエラーメッセージが表示されます。実行時に追加のJavaScriptコードを追加することで、ブラウザがコードを解析する方法が変更されることはありません。したがって、polyfillはそこでは役に立ちません。

ボトムライン:ES6シンタックスを使用していてもES5ブラウザをサポートしたい場合は、コードをES5に変換する必要があります(ES5をTypeScriptからターゲティングするか、Babelを使用して変換する)。

1

簡潔に言えば、バベルポリフィルは、トランスリングと同じレベルのES5サポートを提供しません。 documentationには、core-jsと同様にカスタムリジェネレータランタイムが含まれていると記載されています。

core-jsに、必要なポリフィルが含まれているかどうかを確認できます。しかし、オブジェクト拡散構文はポリフィルされることはできません。

関連する問題