Optimisation TypeScript : noEmitHelpers/importHelpers
Explication
Lorsque Typescript transpile de l’ES6 vers une version inférieur (ES5 ou ES3), il génère des fonctions helpers (ou polyfill) pour émuler des fonctionnalités non implémentés dans certain navigateur. Par exemple lorsqu’on utilise le mot-clé extends :
1 |
|
TypeScript génère :
1 |
|
Il existe un tas d’autre polyfill utilisé par TypeScript :
1 |
|
Bon jusqu’ici rien d’anormal, mais le gros problème, c’est que ces polyfill sont générées dans chaque fichier où ils sont référencés ! Donc si j’ai 10 fichiers ou j’utilise le mot-clé extend, hé bien le polyfill sera généré dans les 10 fichiers :(
Depuis la version 1.8 de TypeScript, l’option de compilation --noEmitHelpers
à été introduite. Elle permet de ne plus générer ces polyfill. Cela permet d’avoir package npm contenant l’ensemble des polyfill (utilisé par TypeScript) et de ne l’importer qu’une seule fois (ce que proposait le package ts-helpers). Le soucis majeur de cette solution est qu’il n’existait pas de package officiel maintenu par l’équipe de TypeScript et qu’il fallait nous-même importer ce package…
Plus ce genre de soucis depuis l’arrivé de la 2.1 ! Première bonne nouvelle, un package officiel existe désormais et est maintenant par l’équipe de TypeScript : tslib. Deuxième good news, plus besoin d’importer nous-même le package grâce à l’option de compilation --importHelpers
qui s’en charge à notre place.
Mise en place
Il vous suffit d’installer la lib tslib :
1 |
|
Puis d’avoir les options noEmitHelpers et importHelpers à true dans votre tsconfig.json :
1 | { |
Et c’est tout !
Le thread de discussion sur Github : thread
A bientôt :)