En août 2024, Node.js a introduit une nouvelle fonctionnalité expérimentale, Type Stripping, visant à résoudre un problème de longue date dans l'écosystème Node.js : l'exécution de TypeScript sans configuration. Cette fonctionnalité permet aux développeurs d’exécuter directement des fichiers TypeScript dans Node.js en supprimant les annotations de type. Activée par défaut dans la version 23.6.0 de Node.js, cette fonctionnalité est en passe de devenir stable.
TypeScript a atteint des niveaux de popularité incroyables et a été la fonctionnalité la plus demandée dans toutes les dernières enquêtes Node.js. Pour rappel, TypeScript ajoute à JavaScript un typage statique avec des annotations de type optionnelles. Il est conçu pour le développement de grandes applications et se transpose à JavaScript. TypeScript peut être utilisé pour développer des applications JavaScript pour une exécution côté client et côté serveur, comme avec Node.js.
Node.js permet aux développeurs d'utiliser JavaScript pour écrire des outils de ligne de commande et des scripts côté serveur. La possibilité d'exécuter du code JavaScript sur le serveur est souvent utilisée pour générer un contenu de page web dynamique avant que la page ne soit envoyée au navigateur web de l'utilisateur. TypeScript sur Node.js, contrairement à d'autres alternatives telles que CoffeeScript ou Flow qui n'ont jamais connu le même succès, est devenu la pierre angulaire du développement moderne.
Bien qu'il ait été pris en charge dans Node.js pendant un certain temps par le biais de chargeurs, ceux-ci reposaient fortement sur la configuration et les bibliothèques d'utilisateurs. Cette dépendance a conduit à des incohérences entre les différents chargeurs, les rendant difficiles à utiliser de manière interchangeable. L'expérience du développeur a souffert de ces incohérences et de la configuration supplémentaire requise. L'objectif est de rendre le développement plus rapide et plus simple, en éliminant les frais généraux de configuration tout en conservant la flexibilité attendue par les développeurs.
TypeScript n'est pas seulement un langage, il s'appuie également sur une chaîne d'outils pour mettre en œuvre ses fonctionnalités. L'outil principal à cet effet est tsc, le compilateur TypeScript CLI. La vérification de type est étroitement liée à l'implémentation de tsc, car il n'y a pas de spécification formelle sur la façon dont le système de type du langage doit se comporter.
Cette absence de spécification signifie que le comportement de tsc est effectivement la définition du système de types de TypeScript. tsc ne suit pas le versionnement sémantique, de sorte que même des mises à jour mineures peuvent introduire des changements dans la vérification des types qui peuvent casser le code existant.
La transpilation, en revanche, est un processus plus stable. Elle consiste à convertir le code TypeScript en JavaScript en supprimant les types, en transformant certaines constructions syntaxiques et, éventuellement, en "rétrogradant" le JavaScript pour permettre à la syntaxe moderne de s'exécuter sur des moteurs JavaScript plus anciens.
Contrairement à la vérification des types, la transpilation est moins susceptible d'être modifiée d'une version à l'autre de . La probabilité de ruptures est encore réduite lorsque nous ne considérons que la transpilation minimale nécessaire pour rendre le code TypeScript exécutable - et que nous excluons le downleveling des nouvelles fonctionnalités JavaScript qui ne sont pas encore disponibles dans le moteur JavaScript, mais qui sont disponibles dans TypeScript.
Node.js, avant de l'activer par défaut, a introduit --experimental-strip-types. Ce mode permet d'exécuter des fichiers TypeScript en supprimant simplement les types en ligne sans effectuer de vérification de type ou toute autre transformation de code. Cette technique minimale est connue sous le nom de Type Stripping. En excluant la vérification de type et la transpilation traditionnelle, les aspects les plus instables de TypeScript, Node.js réduit le risque d'instabilité et évite en grande partie la nécessité de suivre les mises à jour mineures de TypeScript.
De plus, cette solution ne nécessite aucune configuration pour l'exécution du code. Node.js élimine le besoin de cartes de source en remplaçant la syntaxe supprimée par des espaces vides, ce qui garantit que les emplacements originaux du code et de la structure restent intacts. Il est transparent - le code qui s'exécute est le code que l'auteur a écrit, sans les types.
L'équipe Node.js commente cette annonce : "Au fur et à mesure de l'évolution de cette fonctionnalité expérimentale, l'équipe Node.js continuera à collaborer avec l'équipe TypeScript et la communauté pour affiner son comportement et réduire les frictions. Vous pouvez consulter la feuille de route pour connaître les prochaines étapes pratiques."
Sources : Support intégré TypeScript sur Node.js, GitHub, Tout ce qu'il faut savoir sur le Type Stripping de Node.js
Et vous ?
Pensez-vous que cette annonce est crédible ou pertinente ?
Quel est votre avis sur le sujet ?
Voir aussi :
Le top 25 des langages de programmation les plus populaires auprès des DevOps : TypeScript a détrôné JavaScript en tant que langage préféré, Ruby est en 3è position, d'après CircleCI
Microsoft annonce la disponibilité de la version stable de TypeScript 5.7, apportant des améliorations à la vérification des variables non initialisées ainsi qu'à la réécriture des chemins relatifs
Node.js 20.6 est disponible avec une prise en charge des fichiers de configuration .env et l'intégration du garbage collector C++ "Oilpan"