javascript - Kompileras ES6-funktioner till ES5 när de används inom TypeScript?
När jag använder ES6-funktioner som till exempel template string, arrow functions, destructuring inom en TypeScript-fil. Därefter kompilerar jag filen till vanlig JavaScript ...
Blir ES6-syntaxen också kompilerad av TypeScript-kompilatorn? Eller måste jag använda en ytterligare kompilator (Babel)?
Svar #1
Blir ES6-syntaxen också kompilerad av TypeScript-kompilatorn? Eller måste jag använda en ytterligare kompilator (Babel)?
Jag håller inte med Fylax svar. TypeScript-kompilatorn kräver inte ett ytterligare verktyg för att konvertera ES6-syntaxen till ES3 eller ES5.
TypeScript-kompilatorn transpilerar den nya syntaxen (let, for … of, pilfunktioner, restparametrar, etc.) till ES 3 eller 5. Men den tillhandahåller ingen polyfill själv. För att använda ett nytt API (som Promise) på en gammal VM ES 3 eller 5, måste du:
- Ladda en polyfill (som es6-promise) som gör API:et tillgängligt;
- Säg till kompilatorn att använda de standardtypningar som gäller för detta API.
Det är ett robust designalternativ. Med TypeScript måste du noggrant välja vilka polyfills du behöver och testa dem på de olika webbläsare du riktar dig mot.
Som standard, när målet är ES 3 eller ES 5, använder inte kompilatorn definitionerna för det senaste ECMAScript-API:et. Se dokumentationen:
Obs: Om
--libinte anges, injiceras ett standardbibliotek. Det standardbibliotek som injiceras är:► För
--target ES5:dom,es5,scripthost
Om ett polyfill gör ett API tillgängligt, kan vi konfigurera kompilatorn att använda det. Här är ett exempel på konfigurationsfil tsconfig.json för att använda promises på ES5 VM:
{
"compilerOptions": {
"target": "es5",
"lib": ["dom", "es5", "es2015.promise"]
}
}
Babel kan däremot konvertera några fler funktioner till ES 5 än vad TypeScript kan. Se kompatibilitetstabellen från Kangax.
Svar #2
Du behöver ytterligare kompilatorer som nedportar din kod från ES6 till ES5.
TypeScript är ganska smart och kommer att göra det mesta av arbetet åt dig (dvs. översätta let till var eller pilfunktioner till standardfunktioner med rätt scope och bindings).
REDIGERA: som @Paleo påpekade, på 99 % behöver du ingen extern kompilator eftersom du kan ge TypeScript ett extra bibliotek (polyfill) som gör att allt fungerar bra.
Du kommer att behöva en extra kompilator i mycket sällsynta fall när du varken täcks av en transpiler eller av polyfills.
