2017-05-19 13 views
2

ターゲットを 'types3'に設定しました。es3でターゲットをコンパイルするときにforeachがコンパイルされないのはなぜですか?

{ 
    "compilerOptions": { 
     "target": "es3", 
     "outDir": "dist" 
    } 
} 

私は 'foreach'構文を書いています。

const array: string[] = ['hi', 'hello']; 

array.forEach(element => { 
    console.log(element); 
}); 

私はこのコードをコンパイルしました。 以下の結果が得られた。

var array = ['hi', 'hello']; 
array.forEach(function (element) { 
    console.log(element); 
}); 

なぜ 'foreach'構文がes3でコンパイルされないのですか?

+0

「コンパイルしない」とはどういう意味ですか? –

+1

@EduardMalakhov es3をターゲットとしてコンパイルしても、foreach構文は引き続きforeachです。 Foreachはes5以上で使用できるコードです。 –

+0

私は、Typescriptはpolyfillが利用可能な場所に含まれていると仮定し、forEachは簡単にポリフィルすることができます。 – Gerrit0

答えて

2

メソッドは決してTypeScriptの他のフォームに変換されません。 TypeScriptで.someMethod()を呼び出すと、そのようなメソッドが実際に存在しない場合でも、結果のJavaScriptは.someMethod()も呼び出します。代わりに、for-ofの構文では、ES3互換のコードが得られます。

for (const item of []) { } 

これはあなたを与える:lib.d.tsはすべてのES5-が含まれているため

for (var _i = 0, _a = []; _i < _a.length; _i++) { 
    var item = _a[_i]; 
} 

不幸な事はTSは、あなたが.forEachを持っていないエラーが表示されないということですが、これはありますあなたがそれらを持っていると思っています。 (詳細はMicrosoft/TypeScript#2410を参照してください)

関連する問題