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.6
Apportant des am�liorations � la v�rification vraie et nulle non autoris�e ainsi que des m�thodes d'aide pour les it�rateurs

Le , par Jade Emy

123PARTAGES

13  0 
Microsoft annonce la disponibilit� de TypeScript 5.6, apportant des am�liorations � la v�rification vraie et nulle non autoris�e ainsi que des m�thodes d'aide pour les it�rateurs.

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.
}
Des r�sultats similaires peuvent �tre obtenus en activant la r�gle ESLint no-constant-binary-expression ; mais les nouvelles v�rifications effectu�es par TypeScript ne se chevauchent pas parfaitement avec la r�gle ESLint.

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);
}
Il en va de m�me pour les m�thodes telles que keys(), values() et entries() sur les Maps et les Sets.

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])
    );
}
Vous pouvez �galement �tendre le nouvel objet Iterator:

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);
et vous pouvez adapter n'importe quel Iterable ou Iterator existant � ce nouveau type avec Iterator.from :

Code : S�lectionner tout
Iterator.from(...).filter(someFunction);
Toutes ces nouvelles m�thodes fonctionnent tant que vous utilisez un runtime JavaScript plus r�cent, ou que vous utilisez un polyfill pour le nouvel objet Iterator.

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 nombreuses collections et m�thodes int�gr�es produisent des sous-types d'IteratorObjects (comme ArrayIterator, SetIterator, MapIterator, etc.), et les types JavaScript et DOM dans lib.d.ts, ainsi que @types/node, ont �t� mis � jour pour utiliser ce nouveau type.

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 ?

Quel est votre avis sur cette nouvelle version de TypeScript ?

Voir aussi :

Microsoft annonce la disponibilit� de TypeScript 5.5, cette version apporte les pr�dicats de type inf�r�s, les d�clarations isol�es, ainsi qu'une am�lioration de la fiabilit� de l'�diteur

Cinq v�rit�s inconfortables � propos de TypeScript selon Stefan Baumgartner, auteur de livres sur le langage de programmation

TypeScript, les types marqu�s : Produire un moyen de marquer un type, en fournissant un moyen automatis� et facile � utiliser pour rendre un type nominal, par Prosopo
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.

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

Avatar de Gugelhupf
Mod�rateur https://www.developpez.com
Le 10/09/2024 � 15:21
Je suis tr�s preneur de ce type d'am�lioration, cela nous a permis d'am�liorer un code en production:

Avant correction :
Code typescript : S�lectionner tout
.flatMap(attachedProduct => ([attachedProduct?.price] || []));

Apr�s correction :
Code typescript : S�lectionner tout
.flatMap(attachedProduct => attachedProduct.price ? [attachedProduct.price] : []);

que l'on pourrait simplifier par :
Code typescript : S�lectionner tout
.flatMap(attachedProduct => attachedProduct.price || []);

On se sert du flatMap() pour �viter de faire filter()+map(), mais parfois nous allons trop vite dans l'�criture du code et les jeux de donn�es dans nos tests ne suffisent pas � d�celer tous les probl�mes. Ce fix nous �vitera de nous retrouver avec un tableau contenant des �l�ments undefined
1  0