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中運行)。我錯過了什麼?
我知道在每個角落都有一個很好的polyfill。只是很遺憾,即使你要求它這樣做,TS也會默默地輸出非ES3代碼;) – defaude 2014-10-16 15:37:05
把它想象成ES3 *語言*目標,如果有幫助的話:) – 2014-10-16 15:39:39
這是一個使用稍微修改過的版本MDN polyfill(有一個小的TypeScript編譯器錯誤):http://bit.ly/1xVzYOc – Fenton 2014-10-16 15:53:55