
La Release Candidate (RC) de TypeScript 5.8 est désormais disponible. Cette version apporte des vérifications plus granulaires pour les branches dans les expressions de retour, en plus des mises à jours déjà présentées dans l'annonce de la version bêta.
La disponibilité de TypeScript 5.8 Beta a été annoncée par Microsoft au début du mois de février 2025. Cette version bêta offre plusieurs améliorations importantes, dont une meilleure vérification des types de retour pour les types d'accès conditionnels et indexés, le support pour require() des modules ECMAScript dans --module nodenext, l'introduction de l'option --erasableSyntaxOnly, l'ajout de l'option --libReplacement ou des optimisations sur le chargement du programme.
Pour commencer à utiliser la Release Candidate de TypeScript 5.8, vous pouvez l'obtenir via npm avec la commande suivante :
Code : | Sélectionner tout |
npm install -D typescript@rc
Quelles sont les nouveautés depuis la version bêta ?
Depuis la sortie de la version bêta, Microsoft a dû reprendre une partie du travail sur la façon dont les fonctions avec des types de retour conditionnels sont vérifiées. En se basant sur certaines limitations et modifications que l'équipe de TypeScript souhaitait apporter, elle a décidé d'itérer sur la fonctionnalité avec l'objectif de la livrer dans TypeScript 5.9. Cependant, dans le cadre de ce travail, l'équipe a ajouté des vérifications plus granulaires pour les branches dans les expressions de retour. Cette amélioration n'a pas été documentée dans le billet de la version bêta, mais restera dans TypeScript 5.8.
Vérifications granulaires des branches dans les expressions de retour
Considérons un code comme le suivant :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 | declare const untypedCache: Map<any, any>; function getUrlObject(urlString: string): URL { return untypedCache.has(urlString) ? untypedCache.get(urlString) : urlString; } |
L'intention de ce code est de récupérer un objet URL à partir d'un cache s'il existe, ou de créer un nouvel objet URL s'il n'existe pas. Cependant, il existe un bogue : on a oublié de construire un nouvel objet URL avec les données d'entrée. Malheureusement, TypeScript ne détecte généralement pas ce genre de bogue.
Lorsque TypeScript vérifie des expressions conditionnelles telles que cond ? trueBranch : falseBranch, son type est traité comme une union des types des deux branches. En d'autres termes, il obtient le type de trueBranch et de falseBranch, et les combine en un type d'union. Dans ce cas, le type de untypedCache.get(urlString) est any, et le type de urlString est string. C'est là que les choses se gâtent, car le type any est tellement infectieux dans la manière dont il interagit avec les autres types. L'union any | string est simplifiée en any, donc au moment où TypeScript commence à vérifier si l'expression dans l'instruction return est compatible avec le type de retour attendu de URL, le système de type a perdu toute information qui aurait permis de détecter le bogue dans ce code.
Dans TypeScript 5.8, le système de type traite les expressions conditionnelles directement à l'intérieur des instructions return. Chaque branche de l'expression conditionnelle est vérifiée par rapport au type de retour déclaré de la fonction qui la contient (s'il y en a un), de sorte que le système de type peut détecter le bogue dans l'exemple ci-dessus.
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | declare const untypedCache: Map<any, any>; function getUrlObject(urlString: string): URL { return untypedCache.has(urlString) ? untypedCache.get(urlString) : urlString; // ~~~~~~~~~ // error! Type 'string' is not assignable to type 'URL'. } |
Cette modification a été apportée dans le cadre d'un ensemble plus large d'améliorations futures pour TypeScript.
Quelle est la suite ?
À ce stade, Microsoft prévoit très peu de changements pour TypeScript 5.8, hormis des corrections de bogues critiques pour le compilateur et des corrections de bogues mineurs pour le service de langage. Dans les prochaines semaines, la première version stable de TypeScript 5.8 sera publiée. L'équipe de TypeScript recommande ainsi de garder un œil sur le plan d'itération pour connaître les dates de sortie et plus si vous avez besoin de vous coordonner.
Microsoft conclut :
Nous nous concentrons sur le développement de la prochaine version de TypeScript, et nous aurons le plan d'itération disponible dans les prochains jours (y compris les dates de sortie prévues). De plus, nous facilitons l'utilisation des nightly builds de TypeScript sur npm, et il existe une extension pour utiliser ces nightly releases dans Visual Studio Code. Alors, essayez la RC ou nos nightlies ! Nous vous encourageons à nous faire part de vos commentaires sur GitHub.
Et vous ?


Voir aussi :


Vous avez lu gratuitement 0 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.