TypeScript-utdata använder fortfarande Array.prototype.reduce även om jag riktar mot ES3
Jag lekte lite med TypeScript och upptäckte en liten kuriositet. Låt oss säga att jag bygger en liten applikation som (tyvärr) också behöver stödja IE8. Så jag satte TypeScript-kompilatorn att rikta in sig på ES3.
Jag antog att jag säkert kunde använda ECMAScript 5.1-funktioner som Array.prototype.reduce i min .ts-fil och att TypeScript skulle ta hand om att inkludera någon slags polyfill för detta. Det verkar dock inte vara fallet:
function joinStuff (stuff : string[], joiner : string = ' ') {
return stuff.reduce((previous, current) =>
previous ? previous + joiner + current : current
) || '';
}
kommer att kompileras till:
function joinStuff(stuff, joiner) {
if (joiner === void 0) { joiner = ' '; }
return stuff.reduce(function (previous, current) {
return previous ? previous + joiner + current : current;
}) || '';
}
Nu är detta inte ECMAScript 3-kompatibel kod! (och det kommer förstås inte att köras i IE8). Vad missar jag?
Svar #1
TypeScript skapar inte shim eller polyfill för några API:er åt dig. Det finns många färdiga polyfill-bibliotek för detta ändamål.