Microsoft annonce la disponibilit� de TypeScript 4.4 avec une analyse plus approfondie du flux de contr�le
et le type unknown par d�faut

Environ six semaines apr�s la premi�re version b�ta, et apr�s une version candidate le 12 ao�t dernier, Microsoft a publi� la version officielle de TypeScript 4.4 comme pr�vu. Parmi les nouvelles fonctionnalit�s notables, l'on note une analyse �tendue du flux de contr�le lors de la d�termination des types et la possibilit� d'utiliser des symboles comme signatures d'index. Il existe �galement des ajustements optionnels pour les blocs "try-catch" qui peuvent �tre activ�s. TypeScript 4.4 apporte de nombreuses autres fonctionnalit�s et am�liorations en plus de celles ci-dessus.

TypeScript est un JavaScript avec une syntaxe pour les types. Autrement dit, TypeScript est un langage de programmation fortement typ� qui s'appuie sur JavaScript pour vous offrir de meilleurs outils � n'importe quelle �chelle. TypeScript est un langage open source d�velopp� et maintenu par Microsoft depuis octobre 2012, qui publie maintenant une nouvelle version de son surensemble de JavaScript tous les deux mois. La prochaine version, TypeScript 4.5, est d�j� en cours de d�veloppement et devrait �tre publi�e au cours de la deuxi�me semaine de novembre 2021. En attendant, voici ci-dessus un aper�u des points forts de TypeScript 4.4.

Analyse du flux de contr�le des conditions d'alias

TypeScript utilise l'analyse du flux de contr�le pour d�terminer le type de variables. Gr�ce au concept de garde de type, le compilateur sait, dans un bloc ouvert par if (typeof arg === "string"){, que la variable arg doit �tre de type string. Cependant, Type Guard avait auparavant un horizon limit� et n'a pas fouill� dans les profondeurs du code. Par exemple, il n'a pas reconnu le type d�fini en dehors du bloc actuel, comme dans l'exemple suivant tir� du billet de blogue qui annonce la disponibilit� g�n�rale de TypeScript 4.4 :

Code TypeScript : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
 
function foo(arg: unknown) {
    const argIsString = typeof arg === "string";
    if (argIsString) {
        console.log(arg.toUpperCase());
    }
}

Bien que arg � l'int�rieur du bloc if doive �galement �tre de type string ici, le compilateur r�agit avec le message d'erreur "Error ! La propri�t� 'toUpperCase' n'existe pas sur le type 'unknown'". La raison en est que le contr�le de type r�el est effectu� par l'affectation � la constante en dehors du bloc if.

TypeScript 4.4 �tend l'analyse du flux de contr�le pour Type Guard, ce qui signifie que le compilateur traduit d�sormais le code sans messages d'erreur. L'analyse fonctionne pour les propri�t�s constantes et readonly ainsi que pour les param�tres inchang�s. En plus des v�rifications via typeof, le test de l'affiliation aux �l�ments individuels de l'union fonctionne �galement.

Indexation avec symbol

La deuxi�me innovation majeure de TypeScript 4.4 concerne les signatures d'index afin de cartographier, entre autres, les structures de type map. Auparavant, l'acc�s se faisait soit par des cha�nes de caract�res comme cl�s, soit par des nombres comme valeurs d'index avec [key : string] ou [index : number].

TypeScript 4.4 permet d�sormais �galement l'acc�s via les cl�s symbol :

Code TypeScript : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
interface Colors {
    [sym: symbol]: number;
}
 
const red = Symbol("red");
const green = Symbol("green");
const blue = Symbol("blue");

De plus, les motifs de cha�nes de caract�res tels que "color-${string}" sont maintenant autoris�s pour la cha�ne de caract�res en tant que cl� en plus des �l�ments de cha�nes de caract�res ordinaires.

Blocs statiques

TypeScript 4.4 introduit les blocs statiques dans les classes, reprenant ainsi une norme ECMAScript pr�vue. Cette approche permet une initialisation suppl�mentaire des membres statiques des classes, comme dans l'exemple complet du blogue TypeScript :

Code TypeScript : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Foo {
    static #count = 0;
 
    get count() {
        return Foo.#count;
    }
 
    static {
        try {
            const lastInstances = loadLastInstances();
            Foo.#count += lastInstances.length;
        }
        catch {}
    }
}

Les blocs ont acc�s aux champs priv�s de la classe respective. Si les classes ont plusieurs blocs statiques, ils sont trait�s dans l'ordre dans lequel ils apparaissent dans le code source.

Type unknown par d�faut

Deux innovations sont initialement facultatives. L'un d'eux concerne les variables dans les blocs try-catch, qui jusqu'� pr�sent �taient du type any par d�faut lorsqu'elles �taient trait�es dans catch. Ils ont maintenant le type unknown par d�faut si le param�tre --useUnknownInCatchVariables est activ�. TypeScript 4.0, qui a �t� publi� il y a un peu moins d'un an, permettait d�j� la sp�cification explicite de any ou unknown pour le bloc catch.

Le deuxi�me ajustement � activer manuellement concerne les propri�t�s optionnelles : Le param�tre --exactOptionalPropertyTypes garantit que le compilateur n'autorise que le type explicitement sp�cifi� et non pas ind�fini comme auparavant. D'autres innovations, telles que l'option --help r�vis�e, sont disponibles dans cette nouvelle version du langage. TypeScript 4.4 est disponible via NuGet ou peut �tre install�e avec npm install typescript.

Source : TypeScript 4.4

Et vous ?

Que pensez-vous des changements intervenus dans TypeScript 4.4 ?

Voir aussi

TypeScript 4.4 b�ta est disponible et introduit l'indicateur --useUnknownInCatchVariable, qui remplace any, le type par d�faut des variables de clause catch, par unknown

TypeScript 4.3 est disponible et apporte le mot-cl� override pour qu'un dev puisse indiquer clairement s'il avait l'intention d'ajouter une nouvelle m�thode ou de remplacer une m�thode existante

Le cr�ateur de Python, Guido van Rossum, dit ce qu'il pense de Rust, Go, Julia et TypeScript et rel�ve des similitudes entre ces langages et Python