2014-10-16 35 views
2

我正在玩TypeScript有點,發現有點古怪。假設我正在構建一個(可惜)需要支持IE8的小應用程序。所以我將TypeScript編譯器設置爲針對ES3。TypeScript輸出仍然使用Array.prototype.reduce,即使我瞄準ES3

我假設我可以安全地在我的.ts文件中使用ECMAScript 5.1好東西,例如Array.prototype.reduce,並且TypeScript將負責爲此包含某種polyfill。這似乎不是如此,雖然:

function joinStuff (stuff : string[], joiner : string = ' ') { 
    return stuff.reduce((previous, current) => 
     previous ? previous + joiner + current : current 
    ) || ''; 
} 

會被編譯成:

function joinStuff(stuff, joiner) { 
    if (joiner === void 0) { joiner = ' '; } 
    return stuff.reduce(function (previous, current) { 
     return previous ? previous + joiner + current : current; 
    }) || ''; 
} 

現在,這是不ECMAScript的 3兼容的代碼! (當然,它不會在IE8中運行)。我錯過了什麼?

回答

2

TypeScript不會爲您填充或填充任何API。爲此,有許多現成的polyfill庫。

+0

我知道在每個角落都有一個很好的polyfill。只是很遺憾,即使你要求它這樣做,TS也會默默地輸出非ES3代碼;) – defaude 2014-10-16 15:37:05

+0

把它想象成ES3 *語言*目標,如果有幫助的話:) – 2014-10-16 15:39:39

+0

這是一個使用稍微修改過的版本MDN polyfill(有一個小的TypeScript編譯器錯誤):http://bit.ly/1xVzYOc – Fenton 2014-10-16 15:53:55

相關問題