Désormais disponible en version de production, la dernière déclinaison du surensemble fortement typé de JavaScript de Microsoft apporte plusieurs fonctionnalités qui vont de l'analyse du flux de contrôle à l'amélioration des vérifications de la profondeur de récursion. Livrée le 28 février dernier, TypeScript 4.6 arrive après la version Release Candidate publiée le 11 février et la version bêta publiée le 21 janvier.

Avec l’analyse du flux de contrôle pour les Unions Discriminées Destructibles, TypeScript peut désormais restreindre les types sur la base d'une partie discriminante. Lors de la déstructuration de propriétés individuelles dans une déclaration const, ou lors de la déstructuration d'un paramètre dans des variables qui ne sont jamais assignées, TypeScript vérifiera si le type déstructuré est une union discriminée. Si c'est le cas, TypeScript peut réduire les types de variables en fonction des vérifications d'autres variables.

Support d’ES2022

Autre nouveauté de cette version 4.6 de TypeScript, l'option --target qui prend désormais en charge ES2022, ce qui signifie que des fonctionnalités comme les champs de classe ont maintenant une cible de sortie stable où elles peuvent être préservés. Par ailleurs, d’autres fonctionnalités intégrées comme la méthode at() sur les tableaux peuvent être utilisées soit avec ce nouveau paramètre --target soit avec --lib es2022.

Parmi les capacités citées précédemment, une amélioration assouplit les restrictions de programmation en autorisant le code dans les constructeurs avant super(). Dans les classes JavaScript, il est obligatoire d'appeler super() avant de se référer this. TypeScript a également appliqué cette règle, mais de manière un peu trop strict, selon un avis sur TypeScript 4.6 qui indique que c'était une erreur de contenir du code au début d'un constructeur si la classe qui le contient avait des initialisateurs de propriétés. Cette méthode permettait de vérifier « sans effort » l'appel de super() avant que this ne soit référencé, mais entraînait le rejet de beaucoup de code valide. TypeScript 4.6 assouplit cette vérification. Elle permet également à d'autres codes de s'exécuter avant super() tout en garantissant que super() se produit au niveau supérieur avant les références à this.

TypeScript 4.6 est accessible via NuGet ou via NPM : npm install typescript

Plusieurs autres évolutions

Parmi les autres fonctionnalités et améliorations apportées à TypeScript 4.6, on peut citer : 

- L'analyse du flux de contrôle pour les paramètres dépendants : TypeScript peut réduire les paramètres qui dépendent des autres, dans certaines situations où TypeScript infère d'une signature à partir d’un paramètre de repos.

- Amélioration des vérifications de la profondeur de récursion : Elles offrent une meilleure vérification des relations pour les types récursifs.

- Améliorations de l'inférence d'accès indexé : TypeScript peut désormais inférer les types d'accès indexés qui indexent immédiatement dans un type d'objet mappé.

- Plus d'erreurs de syntaxe et de liaison en JavaScript : L'ensemble des erreurs de syntaxe et de liaison dans les fichiers JavaScript a été étendu. Elles seront visibles si les développeurs ouvrent les fichiers JavaScript dans un éditeur comme Visual Studio ou Visual Studio Code, ou s'ils exécutent le code JavaScript à travers le compilateur TypeScript.

- Analyseur de traces TypeScript : l’outil d'analyse des traces va aider les équipes qui rencontrent des problèmes de performances de compilation dans le compilateur TypeScript.

- Les expressions de repos d'objet laissent maintenant tomber les membres qui semblent être des objets non répandus ou génériques. C’est un changement radical.

Publiée en novembre dernier, la version précédente TypeScript 4.5 avait apporté des améliorations au type Awaited et Promise.