IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Microsoft annonce la disponibilité de TypeScript 5.5 RC (Release Candidate)
Cette version prend en charge les nouvelles méthodes ECMAScript Set et améliore la fiabilité de l'éditeur et du mode veille

Le , par Jade Emy

6PARTAGES

5  0 
Microsoft annonce la disponibilité de la version candidate de TypeScript 5.5.

Voici une liste rapide des nouveautés de TypeScript 5.5 :

  • Prédicats de type inférés
  • Réduction du flux de contrôle pour les accès indexés constants
  • Importations de types dans JSDoc
  • Vérification syntaxique des expressions régulières
  • Déclarations isolées
  • La variable modèle ${configDir} pour les fichiers de configuration
  • Consultation des dépendances package.json pour la génération de fichiers de déclaration
  • Amélioration de la fiabilité de l'éditeur et du mode veille
  • Optimisation des performances et de la taille
  • Modules ECMAScript de consommation d'API plus faciles à utiliser
  • API transpileDeclaration


Une partie de ces nouveautés sont détaillées dans l'annonce de TypeScript 5.5 Beta. Pour TypeScript 5.5 RC, Microsoft a ajouté la prise en charge des nouvelles méthodes ECMAScript Set. De plus, ils ont ajusté le comportement de la nouvelle vérification des expressions régulières de TypeScript pour être légèrement plus indulgent, tout en continuant à faire des erreurs sur les échappements douteux qui ne sont autorisés que par l'annexe B d'ECMAScript.

Microsoft a également ajouté et documenté encore plus d'optimisations de performance : notamment, la vérification sautée dans transpileModule et les optimisations dans la façon dont TypeScript filtre les types contextuels. Ces optimisations peuvent conduire à des temps de construction et d'itération plus rapides dans de nombreux scénarios courants.


Prise en charge des nouvelles méthodes ECMAScript Set

TypeScript 5.5 déclare de nouvelles méthodes proposées pour le type ECMAScript Set.

Certaines de ces méthodes, comme union, intersection, différence et symmetricDifference, prennent un autre Set et renvoient un nouveau Set comme résultat. Les autres méthodes, isSubsetOf, isSupersetOf et isDisjointFrom, prennent un autre ensemble et renvoient un booléen. Aucune de ces méthodes ne modifie les ensembles d'origine.

Consultation des dépendances package.json pour la génération du fichier de déclaration

Auparavant, TypeScript affichait souvent un message d'erreur du type :

Code : Sélectionner tout
The inferred type of "X" cannot be named without a reference to "Y". This is likely not portable. A type annotation is necessary.
Cela était souvent dû au fait que la génération du fichier de déclaration de TypeScript se retrouvait dans le contenu de fichiers qui n'avaient jamais été explicitement importés dans un programme. Générer une importation dans un tel fichier pouvait être risqué si le chemin d'accès s'avérait être relatif. Néanmoins, pour les bases de code avec des dépendances explicites dans les dependencies (ou peerDependencies et optionalDependencies) d'un package.json, la génération d'un tel import devrait être sûre sous certains modes de résolution. Ainsi, dans TypeScript 5.5, Microsoft est plus indulgents lorsque c'est le cas, et de nombreuses occurrences de cette erreur devraient disparaître.

Amélioration de la fiabilité de l'éditeur et du mode veille

TypeScript a ajouté de nouvelles fonctionnalités ou corrigé la logique existante qui rend le mode --watch et l'intégration de l'éditeur TypeScript plus fiables. Cela devrait se traduire par moins de redémarrages de TSServer/éditeur.

Rafraîchissement correct des erreurs de l'éditeur dans les fichiers de configuration

TypeScript peut générer des erreurs pour les fichiers tsconfig.json ; cependant, ces erreurs sont en fait générées lors du chargement d'un projet, et les éditeurs ne demandent généralement pas directement ces erreurs pour les fichiers tsconfig.json. Bien que cela semble être un détail technique, cela signifie que lorsque toutes les erreurs émises dans un fichier tsconfig.json sont corrigées, TypeScript n'émet pas un nouvel ensemble d'erreurs fraîches et vides, et les utilisateurs se retrouvent avec des erreurs périmées à moins qu'ils ne rechargent leur éditeur.

TypeScript 5.5 émet désormais intentionnellement un événement pour effacer ces erreurs.

Meilleure gestion des suppressions suivies d'écritures immédiates

Au lieu d'écraser les fichiers, certains outils choisissent de les supprimer et de créer de nouveaux fichiers à partir de zéro. C'est le cas lors de l'exécution de npm ci, par exemple.

Si cela peut être efficace pour ces outils, cela peut être problématique pour les scénarios de l'éditeur TypeScript où la suppression d'un fichier surveillé peut l'éliminer ainsi que toutes ses dépendances transitives. La suppression et la création d'un fichier en succession rapide peuvent conduire TypeScript à démanteler un projet entier et à le reconstruire à partir de zéro.

TypeScript 5.5 a désormais une approche plus nuancée en conservant des parties d'un projet supprimé jusqu'à ce qu'il détecte un nouvel événement de création. Cela devrait permettre à des opérations comme npm ci de mieux fonctionner avec TypeScript.

Les liens symboliques sont suivis dans les résolutions échouées

Lorsque TypeScript échoue à résoudre un module, il devra toujours surveiller les chemins de recherche qui ont échoué dans le cas où le module est ajouté plus tard. Auparavant, cela n'était pas fait pour les répertoires liés par des liens symboliques, ce qui pouvait causer des problèmes de fiabilité dans des scénarios de type monorepo lorsqu'une construction se produisait dans un projet mais n'était pas observée dans l'autre. Ce problème devrait être corrigé dans TypeScript 5.5, ce qui signifie que vous n'aurez plus besoin de redémarrer votre éditeur aussi souvent.

Les références de projet contribuent aux importations automatiques

Les importations automatiques ne nécessitent plus au moins une importation explicite vers des projets dépendants dans une configuration de référence de projet. Au lieu de cela, les compléments d'auto-importation devraient fonctionner pour tout ce que vous avez listé dans le champ references de votre tsconfig.json.

Optimisation des performances et de la taille

Objets monomorphisés dans le service linguistique et l'API publique

Dans TypeScript 5.0, les objets Node et Symbol avaient un ensemble cohérent de propriétés avec un ordre d'initialisation cohérent. Cela permet de réduire le polymorphisme dans les différentes opérations, ce qui permet aux moteurs d'exécution d'aller chercher les propriétés plus rapidement.

En apportant ce changement, Microsoft a constaté des gains de vitesse impressionnants dans le compilateur ; cependant, la plupart de ces changements ont été effectués sur les allocateurs internes pour les structures de données. Le service linguistique, ainsi que l'API publique de TypeScript, utilisent un ensemble différent d'allocateurs pour certains objets. Cela a permis au compilateur TypeScript d'être un peu plus léger, car les données utilisées uniquement pour le service de langage ne seraient jamais utilisées dans le compilateur.

Dans TypeScript 5.5, le même travail de monomorphisation a été effectué pour le service de langage et l'API publique. Cela signifie que votre expérience d'éditeur, et tous les outils de construction qui utilisent l'API TypeScript, deviendront beaucoup plus rapides. En fait, dans ses benchmarks, Microsoft a constaté une accélération de 5 à 8 % des temps de construction lors de l'utilisation des allocateurs de l'API TypeScript publique, et des opérations du service de langage plus rapides de 10 à 20 %. Bien que cela implique une augmentation de la mémoire, Microsoft pense que ce compromis en vaut la peine et espère trouver des moyens de réduire cette surcharge de mémoire. Les choses devraient être beaucoup plus rapides maintenant.

Nœuds de flux de contrôle monomorphisés

Dans TypeScript 5.5, les nœuds du graphe de flux de contrôle ont été monomorphisés afin qu'ils conservent toujours une forme cohérente. Ce faisant, les temps de vérification seront souvent réduits d'environ 1%.

Optimisations du graphe de flux de contrôle

Dans de nombreux cas, l'analyse du flux de contrôle traverse des nœuds qui ne fournissent aucune nouvelle information. Microsoft a observé qu'en l'absence de terminaison précoce ou d'effets dans les antécédents (ou « dominateurs ») de certains nœuds, ces nœuds pouvaient toujours être ignorés. Ainsi, TypeScript construit désormais ses graphes de flux de contrôle pour tirer parti de cette situation en établissant un lien avec un nœud antérieur qui fournit des informations intéressantes pour l'analyse du flux de contrôle. Cela permet d'obtenir un graphique de flux de contrôle plus plat, qui peut être plus efficace à parcourir. Cette optimisation a permis d'obtenir des gains modestes, mais avec des réductions allant jusqu'à 2 % du temps de construction sur certaines bases de code.

Vérification omise dans transpileModule et transpileDeclaration

L'API transpileModule de TypeScript peut être utilisée pour compiler le contenu d'un seul fichier TypeScript en JavaScript. De même, l'API transpileDeclaration peut être utilisée pour générer un fichier de déclaration pour un seul fichier TypeScript. L'un des problèmes posés par ces API est que TypeScript effectue en interne un contrôle de type complet sur l'ensemble du contenu du fichier avant d'émettre la sortie. Cela était nécessaire pour collecter certaines informations qui seraient ensuite utilisées pour la phase d'émission.

Dans TypeScript 5.5, Microsoft a trouvé un moyen d'éviter d'effectuer une vérification complète, en ne collectant que paresseusement ces informations si nécessaire, et transpileModule et transpileDeclaration activent tous deux cette fonctionnalité par défaut. En conséquence, les outils qui s'intègrent à ces API, comme ts-loader avec transpileOnly et ts-jest, devraient voir une accélération notable. Lors des tests, Microsoft a généralement constaté une accélération de 2 fois du temps de construction en utilisant transpileModule.

Réduction de la taille des paquets TypeScript

En tirant parti de la transition vers les modules dans la version 5.0, Microsoft a considérablement réduit la taille globale des paquets TypeScript en faisant en sorte que tsserver.js et typingsInstaller.js importent à partir d'une bibliothèque API commune au lieu d'avoir chacun d'entre eux produisant des paquets autonomes.

Cela réduit la taille de TypeScript sur le disque de 30,2 Mo à 20,4 Mo, et réduit sa taille emballée de 5,5 Mo à 3,7 Mo !

Réutilisation de nœuds dans Declaration Emit

Dans le cadre de l'activation des isolatedDeclarations, Microsoft a considérablement amélioré la fréquence à laquelle TypeScript peut copier directement votre code source d'entrée lors de la production de fichiers de déclaration.

Notez que les types d'union sont équivalents, mais que l'ordre de l'union est différent. Lors de l'émission du fichier de déclaration, TypeScript a deux possibilités de sortie équivalente.

La première consiste à utiliser une représentation canonique cohérente pour chaque type. La seconde approche est généralement préférable pour plusieurs raisons :

  • De nombreuses représentations équivalentes encodent encore un certain niveau d'intention qu'il est préférable de préserver dans le fichier de déclaration
  • La production d'une nouvelle représentation d'un type peut être quelque peu coûteuse, il est donc préférable de l'éviter.
  • Les types écrits par l'utilisateur sont généralement plus courts que les représentations de types générées.


Dans la version 5.5, Microsoft a grandement amélioré le nombre d'endroits où TypeScript peut correctement identifier les endroits où il est sûr et correct d'imprimer les types exactement comme ils ont été écrits dans le fichier d'entrée. Beaucoup de ces cas sont des améliorations de performance invisibles - TypeScript générerait de nouveaux ensembles de nœuds syntaxiques et les sérialiserait dans une chaîne de caractères. Au lieu de cela, TypeScript peut maintenant opérer directement sur les nœuds syntaxiques originaux, ce qui est beaucoup moins coûteux et plus rapide.

Mise en cache des types contextuels à partir d'unions discriminées

Lorsque TypeScript demande le type contextuel d'une expression comme un littéral d'objet, il rencontre souvent un type union. Dans ce cas, TypeScript essaie de filtrer les membres de l'union en se basant sur des propriétés connues avec des valeurs bien connues (c'est-à-dire des propriétés discriminantes). Ce travail peut être assez coûteux, surtout si vous vous retrouvez avec un objet composé d'un grand nombre de propriétés. Dans TypeScript 5.5, une grande partie du calcul est mise en cache une fois pour que TypeScript n'ait pas besoin de le recalculer pour chaque propriété de l'objet littéral. Cette optimisation a permis de gagner 250 ms sur la compilation du compilateur TypeScript lui-même.

Modules ECMAScript de consommation d'API plus faciles à utiliser

Auparavant, si vous écriviez un module ECMAScript dans Node.js, les importations nommées n'étaient pas disponibles dans le package typescript.

Code : Sélectionner tout
1
2
3
4
5
6
import { createSourceFile } from "typescript"; //  error

import * as ts from "typescript";
ts.createSourceFile //  undefined???

ts.default.createSourceFile //  works - but ugh!
En effet, cjs-module-lexer ne reconnaissait pas le modèle de code CommonJS généré par TypeScript. Ce problème a été corrigé et les utilisateurs peuvent désormais utiliser les importations nommées du paquetage TypeScript npm avec les modules ECMAScript dans Node.js.

Code : Sélectionner tout
1
2
3
4
import { createSourceFile } from "typescript"; //  works now!

import * as ts from "typescript";
ts.createSourceFile //  works now!

L'API transpileDeclaration

L'API TypeScript expose une fonction appelée transpileModule. Elle est destinée à faciliter la compilation d'un seul fichier de code TypeScript. Comme elle n'a pas accès à un programme entier, elle risque de ne pas produire le bon résultat si le code ne respecte pas les erreurs de l'option isolatedModules.

Dans TypeScript 5.5, Microsoft a ajouté une nouvelle API similaire appelée transpileDeclaration. Cette API est similaire à transpileModule, mais elle est spécifiquement conçue pour générer un seul fichier de déclaration basé sur un texte source d'entrée. Tout comme transpileModule, elle n'a pas accès à un programme complet, et une mise en garde similaire s'applique : elle ne génère un fichier de déclaration précis que si le code d'entrée est exempt d'erreurs en vertu de la nouvelle option isolatedDeclarations.

Si vous le souhaitez, cette fonction peut être utilisée pour paralléliser l'émission de déclarations dans tous les fichiers en mode isolatedDeclarations. Notez que, bien que vous puissiez ressentir une partie de la surcharge de performance de transpileModule dans transpileDeclaration, Microsoft travaille sur des moyens d'optimiser cela davantage.

Des changements de comportements sont également notables dans TypeScript 5.5. Parmi les changements, on peut noter :

  • Désactivation des fonctionnalités obsolètes dans TypeScript 5.0
  • Changements dans lib.d.ts
  • Respect des extensions de fichiers et de package.json dans d'autres modes de modules
  • Parsing plus strict pour les décorateurs
  • undefined n'est plus un nom de type définissable
  • Déclaration simplifiée de la directive de référence Emit


Quelles sont les prochaines étapes ?

Microsoft :

À ce stade, nous prévoyons très peu de changements pour TypeScript 5.5 en dehors des corrections de bogues critiques pour le compilateur et des corrections de bogues mineurs pour le service de langage. Dans les prochaines semaines, nous publierons la première version stable de TypeScript 5.5. Gardez un œil sur notre plan d'itération pour connaître les dates de sortie et plus si vous avez besoin de vous coordonner.

Sinon, nous nous concentrons sur le développement de TypeScript 5.6, 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.
Source : Annonce Typescript 5.5 RC

Et vous ?

Quel est votre avis sur le sujet ?

Voir aussi :

Microsoft annonce la disponibilité de TypeScript 5.5 Beta, cette version apporte les prédicats de type inférés et réduit le flux de controle pour les accès indexés constants

Microsoft annonce la disponibilité de la version candidate de TypeScript 5.4, cette version corrige des bogues critiques et contient des changements notables de comportement

Une erreur dans cette actualité ? Signalez-nous-la !