
Microsoft annonce la disponibilit� de TypeScript 5.6. Parmi les mises � jour : am�liorations des v�rifications vraies et nulles non autoris�es, de nouvelles m�thodes d'aide � l'it�rateur, prise en charge d'identifiants de modules arbitraires, am�liorations des v�rifications strictes des it�rateurs int�gr�s, l'introduction des options --noUncheckedSideEffectImports et --noCheck, et d'autres changements de comportements notables.
TypeScript est un langage qui s'appuie sur JavaScript en ajoutant une syntaxe pour les types. Les types d�crivent les formes attendues des variables, param�tres et fonctions, et le v�rificateur de type TypeScript peut aider � d�tecter des probl�mes tels que les fautes de frappe, les propri�t�s manquantes et les mauvais appels de fonction avant l'ex�cution du code. Les types alimentent �galement les outils d'�dition de TypeScript, comme l'auto-compl�tion, la navigation dans le code et les refactorisations dans des �diteurs tels que Visual Studio et VS Code. En fait, si vous �crivez du JavaScript dans l'un ou l'autre de ces �diteurs, cette exp�rience est aliment�e par TypeScript !
Microsoft vient d'annoncer la sortie de TypeScript 5.6. Depuis la version b�ta de TypeScript 5.6, l'�quipe de TypeScript est revenu sur un changement concernant la fa�on dont le service de langage TypeScript recherche les fichiers tsconfig.json. Auparavant, le service de langage n'arr�tait pas de chercher tous les fichiers de projet nomm�s tsconfig.json susceptibles de contenir un fichier. Comme cela pouvait conduire � l'ouverture de nombreux projets r�f�renc�s, ce comportement a �t� annul�e pour TypeScript 5.6. Elle pourrait revenir dans TypeScript 5.7.
En outre, plusieurs nouveaux types ont �t� renomm�s depuis la version b�ta. Auparavant, TypeScript fournissait un seul type appel� BuiltinIterator pour d�crire chaque valeur soutenue par Iterator.prototype. Il a �t� renomm� IteratorObject, a un ensemble diff�rent de param�tres de type, et a maintenant plusieurs sous-types comme ArrayIterator, MapIterator, et plus encore.
Un nouveau drapeau appel� --stopOnBuildErrors a �t� ajout� pour le mode --build. Lorsqu'un projet se construit avec des erreurs, aucun autre projet ne sera construit. Cela permet de se rapprocher du comportement des versions pr�c�dentes de TypeScript puisque TypeScript 5.6 construit toujours en cas d'erreur.
De nouvelles fonctionnalit�s de l'�diteur ont �t� ajout�es, telles que le support direct des caract�res de validation et des motifs d'exclusion pour les auto-importations.
Voici quelques mises � jours de cette version :
V�rifications vraies et nulles non autoris�es
Voici quelques exemples d'erreurs qui ne correspondent pas � l'intention de l'auteur, mais ils constituent tous du code JavaScript valide.
- Ecrire une regex et oubli� d'appeler .test(...) dessus
- Ecrire => (qui cr�e une fonction fl�che) au lieu de >= (l'op�rateur plus grand que ou �gal �)
- Utiliser une valeur par d�faut avec ? ?, mais confondre la priorit� de ? ? et d'un op�rateur de comparaison comme <
- Mal placer une parenth�se dans une expression complexe
Auparavant, TypeScript acceptait aussi ces exemples. Mais de nombreux bogues pouvaient �tre d�tect�s en signalant ces exemples suspects.
Dans TypeScript 5.6, le compilateur fait d�sormais des erreurs lorsqu'il peut d�terminer syntaxiquement qu'une v�rification vraie ou nulle sera toujours �valu�e d'une mani�re sp�cifique. Ainsi, dans les exemples ci-dessus, vous commencerez � voir des erreurs :
Code : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | if (/0x[0-9a-f]/) { // ~~~~~~~~~~~~ // error: This kind of expression is always truthy. } if (x => 0) { // ~~~~~~ // error: This kind of expression is always truthy. } function isValid(value: string | number, options: any, strictness: "strict" | "loose") { if (strictness === "loose") { value = +value } return value < options.max ?? 100; // ~~~~~~~~~~~~~~~~~~~ // error: Right operand of ?? is unreachable because the left operand is never nullish. } if ( isValid(primaryValue, "strict") || isValid(secondaryValue, "strict") || isValid(primaryValue, "loose" || isValid(secondaryValue, "loose")) ) { // ~~~~~~~ // error: This kind of expression is always truthy. } |
Notez que certaines expressions sont toujours autoris�es, m�me si elles sont toujours vraies ou nulles. Plus pr�cis�ment, true, false, 0 et 1 sont toujours autoris�s m�me si elles sont toujours vraies ou fausses.
M�thodes d'aide pour les it�rateurs
JavaScript a une notion d'it�rables (choses sur lesquelles on peut it�rer en appelant un [Symbol.iterator]() et en obtenant un it�rateur) et d'it�rateurs (choses qui ont une m�thode next() que l'on peut appeler pour essayer d'obtenir la valeur suivante au fur et � mesure de l'it�ration). En g�n�ral, il n'est pas n�cessaire de penser � ces choses lorsque vous les placez dans une boucle for/of, ou [...spread] dans un nouveau tableau. Mais TypeScript les mod�lise avec les types Iterable et Iterator (et m�me IterableIterator qui agit comme les deux !), et ces types d�crivent l'ensemble minimal de membres dont vous avez besoin pour que des constructions comme for/of fonctionnent sur eux.
Les Iterables (et les IterableIterators) sont int�ressants car ils peuvent �tre utilis�s dans toutes sortes d'endroits en JavaScript - mais beaucoup de gens se sont aper�us qu'il manquait des m�thodes sur les Arrays comme map, filter, et pour une raison ou une autre reduce. C'est pourquoi une proposition r�cente a �t� pr�sent�e dans ECMAScript pour ajouter de nombreuses m�thodes (et plus) de Array � la plupart des IterableIterators qui sont produits en JavaScript.
Par exemple, chaque g�n�rateur produit d�sormais un objet qui poss�de �galement une m�thode map et une m�thode take.
Code : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | function* positiveIntegers() { let i = 1; while (true) { yield i; i++; } } const evenNumbers = positiveIntegers().map(x => x * 2); // Output: // 2 // 4 // 6 // 8 // 10 for (const value of evenNumbers.take(5)) { console.log(value); } |
Code : | S�lectionner tout |
1 2 3 4 5 | function invertKeysAndValues<K, V>(map: Map<K, V>): Map<V, K> { return new Map( map.entries().map(([k, v]) => [v, k]) ); } |
Code : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 | /** * Provides an endless stream of `0`s. */ class Zeroes extends Iterator<number> { next() { return { value: 0, done: false } as const; } } const zeroes = new Zeroes(); // Transform into an endless stream of `1`s. const ones = zeroes.map(x => x + 1); |
Code : | S�lectionner tout |
Iterator.from(...).filter(someFunction);
Concernant le nommage : TypeScript dispose de types pour Iterable et Iterator, cependant, ces types agissent en quelque sorte comme des "protocoles" pour garantir le bon fonctionnement de certaines op�rations. "Cela signifie que toutes les valeurs d�clar�es Iterable ou Iterator en TypeScript ne disposent pas de ces m�thodes.
Mais il existe toujours une nouvelle valeur d'ex�cution appel�e Iterator. Vous pouvez r�f�rencer Iterator, ainsi que Iterator.prototype, comme des valeurs r�elles en JavaScript. C'est un peu g�nant car TypeScript d�finit d�j� sa propre chose appel�e Iterator uniquement pour la v�rification de type. En raison de ce malheureux conflit de noms, TypeScript doit donc introduire un type distinct pour d�crire ces it�rateurs natifs/int�gr�s.
TypeScript 5.6 introduit un nouveau type appel� IteratorObject. Il est d�fini comme suit :
Code : | S�lectionner tout |
1 2 3 | interface IteratorObject<T, TReturn = unknown, TNext = unknown> extends Iterator<T, TReturn, TNext> { [Symbol.iterator](): IteratorObject<T, TReturn, TNext>; } |
De m�me, il existe un type AsyncIteratorObject pour la parit�. AsyncIterator n'existe pas encore en tant que valeur d'ex�cution en JavaScript qui apporte les m�mes m�thodes pour AsyncIterables, mais c'est une proposition active et ce nouveau type s'y pr�pare.
L'option --noCheck
TypeScript 5.6 introduit une nouvelle option de compilation, --noCheck, qui permet d'ignorer la v�rification de type pour tous les fichiers d'entr�e. Cela permet d'�viter les v�rifications de type inutiles lors de l'analyse s�mantique n�cessaire � l'�mission des fichiers de sortie.
Un sc�nario pour cela est de s�parer la g�n�ration de fichiers JavaScript de la v�rification de type afin que les deux puissent �tre ex�cut�s comme des phases distinctes. Par exemple, vous pouvez ex�cuter tsc --noCheck pendant l'it�ration, puis tsc --noEmit pour une v�rification compl�te du type. Vous pouvez �galement ex�cuter les deux t�ches en parall�le, m�me en mode --watch, bien que vous devriez probablement sp�cifier un chemin --tsBuildInfoFile s�par� si vous les ex�cutez vraiment en m�me temps.
--noCheck est �galement utile pour �mettre des fichiers de d�claration d'une mani�re similaire. Dans un projet o� --noCheck est sp�cifi� sur un projet conforme � --isolatedDeclarations, TypeScript peut rapidement g�n�rer des fichiers de d�claration sans passer par la v�rification de type. Les fichiers de d�claration g�n�r�s s'appuieront uniquement sur des transformations syntaxiques rapides.
Notez que dans les cas o� --noCheck est sp�cifi�, mais qu'un projet n'utilise pas --isolatedDeclarations, TypeScript peut toujours effectuer autant de v�rifications de type que n�cessaire pour g�n�rer des fichiers .d.ts. Dans ce sens, --noCheck est un peu mal nomm� ; cependant, le processus sera plus paresseux qu'une v�rification de type compl�te, ne calculant que les types des d�clarations non annot�es. Cela devrait �tre beaucoup plus rapide qu'une v�rification de type compl�te.
noCheck est �galement disponible via l'API TypeScript en tant qu'option standard. En interne, transpileModule et transpileDeclaration utilisaient d�j� noCheck pour acc�l�rer les choses (au moins � partir de TypeScript 5.5). D�sormais, n'importe quel outil de compilation devrait �tre en mesure de tirer parti de ce drapeau, en adoptant une vari�t� de strat�gies personnalis�es pour coordonner et acc�l�rer les compilations.
Autoriser --build avec des erreurs interm�diaires
Le concept de r�f�rences de projet de TypeScript vous permet d'organiser votre base de code en plusieurs projets et de cr�er des d�pendances entre eux. L'ex�cution du compilateur TypeScript en mode --build (ou tsc -b en abr�g�) est le moyen int�gr� de mener cette compilation � travers les projets et de d�terminer quels projets et quels fichiers doivent �tre compil�s.
Auparavant, l'utilisation du mode --build supposait --noEmitOnError et arr�tait imm�diatement la compilation en cas d'erreur. Cela signifiait que les projets "en aval" ne pouvaient jamais �tre v�rifi�s et compil�s si l'une de leurs d�pendances "en amont" avait des erreurs de compilation. En th�orie, il s'agit d'une approche tr�s cromulante - si un projet a des erreurs, il n'est pas n�cessairement dans un �tat coh�rent pour ses d�pendances.
En r�alit�, ce type de rigidit� rendait des choses comme les mises � jour p�nibles. Par exemple, si le projetB d�pend du projetA, les personnes qui connaissent mieux le projetB ne peuvent pas mettre � jour leur code de mani�re proactive tant que leurs d�pendances n'ont pas �t� mises � jour. Ils sont bloqu�s par le travail de mise � niveau du projetA en premier lieu.
� partir de TypeScript 5.6, le mode --build continuera � construire des projets m�me s'il y a des erreurs interm�diaires dans les d�pendances. Les erreurs interm�diaires seront signal�es de mani�re coh�rente et les fichiers de sortie seront g�n�r�s au mieux ; cependant, la construction se poursuivra jusqu'� son terme sur le projet sp�cifi�.
Si vous souhaitez arr�ter la compilation au premier projet contenant des erreurs, vous pouvez utiliser un nouveau drapeau appel� --stopOnBuildErrors. Cela peut �tre utile lorsque vous travaillez dans un environnement CI, ou lorsque vous it�rez sur un projet qui est fortement d�pendant d'autres projets.
Notez que pour ce faire, TypeScript �met toujours un fichier .tsbuildinfo pour tout projet dans une invocation --build (m�me si --incremental/--composite n'est pas sp�cifi�). Cela permet de garder une trace de l'�tat de l'invocation de --build et du travail � effectuer dans le futur.
Source : Microsoft
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.