私はTypeScript
とWebpack
を使用しています。TypeScript
コードをES5
コードに翻訳することについて質問があります。TypeScript 'target'とBabel
target
オプション(tsconfig.json
)をES5
に設定すると、私は正しく理解しても、バベルローダーは必要ありませんか?右?
もしそうでなければ、違いはどこですか?
私はTypeScript
とWebpack
を使用しています。TypeScript
コードをES5
コードに翻訳することについて質問があります。TypeScript 'target'とBabel
target
オプション(tsconfig.json
)をES5
に設定すると、私は正しく理解しても、バベルローダーは必要ありませんか?右?
もしそうでなければ、違いはどこですか?
答えは次のとおりです。これは、使用するES6の機能によって異なります。 TypeScriptはそれらのほとんどを扱い、ES5にコンパイルしますが、for..ofループのようないくつかの例外があります。 for..ofループは、イテレータに基づくES6機能です。オブジェクトごとに、メソッドを定義して[Symbol.iterator]
というキーの下に置くことができます。このメソッドはfor..of loopによってオブジェクトを反復処理するために使用されます。詳細for example hereを見つけることができます。しかし、TypeScriptターゲットをES5に設定すると、これは機能しません。これは、ES5の場合、TypeScriptは反復処理するオブジェクトに明示的なlength
プロパティがあり、整数インデックス型(配列のような)であると仮定してループを基本forループにコンパイルするためです。例を見てください:
for (const a of someObject) {
//some operations
}
あなたはES5に目標を設定している場合、これはあなたがそのオブジェクトに0
からlength-1
に両方length
と整数の性質を提供するために、必要とする
for (var _i = 0; _i < someObject.length; _i++) {
var a = someObject[_i];
//some operations
}
にコンパイルされます。これは、イテレータのアイデアに反するものです。イテレータは、オブジェクトを反復処理する方法をES6で自由に定義できます。
要約すると、ES5ターゲットのTypeScriptコードでES6機能を使用する予定がある場合は、コンパイル先を確認してください。出力コードにいくつかの制限がある場合は、targetをES6に設定し、結果にBabelを使用します。