Angular2クイックスタートガイド に従って、2つの場所にes6-shim
を含めるように指示されます。
1)index.html
<script src="node_modules/es6-shim/es6-shim.min.js"></script>
2)typings.json
"ambientDependencies": {
"es6-shim": "github:DefinitelyTyped/DefinitelyTyped/es6-shim/es6-shim.d.ts#6697d6f7dadbf5773cb40ecda35a76027e0783b2"
}
es6
コードをes5
にコンパイルしているという印象を受けました。
tsconfig.json
で設定
{
"compilerOptions": {
"target": "es5",
...
最終結果がブラウザーがes5
をロードしている場合、ブラウザーがes6
のshimを必要とするのはなぜですか?
エディターはタイピングを使用してコードヒント/インテリセンスを提供し、_es6-shim.min.js
_はES5ブラウザーのES6機能をエミュレートするコードです。これらの機能の一部はPromise
、Array.from()
...です。
コードをES5に変換している間、_es6-shim
_を含める必要があります。そのため、これらの新しい機能を使用できます...このES6コードを検討してください。
_let test1 = () => 123 + 456;
let test2 = new Promise((resolve, reject ) => {});
_
eS5コードに変換されます。
_var test1 = function () { return 123 + 456; };
var test2 = new Promise(function (resolve, reject) { });
_
しかし、_es6-shim
_がなければPromiseは未定義になります...
TypeScriptには、ポリフィルが組み込まれていません。トランスパイルしない特定の機能があります。これは_es-shim
_のようなポリフィルが入る場所です。
TypeScript定義ファイルは、選択したエディター内でタイピングサポートを提供し、_es-shim
_は、TypeScriptがES5コードに変換しない機能の実装を提供します。
TypeScriptがトランスパイルしない機能のいくつかは次のとおりです。
Array.from()
、Array.of()
、Number.isInteger()
など)一般的なアプローチは次のとおりです。
経験則では、巨大なperf-hitを持たない正規の/正常な出力がある場合、それをサポートしようとします。ランタイムメソッドやデータ構造は追加しません。これは、core.js(または任意のpollyfil)が実行する機能です。 - ソース(TypeScript開発者)