TypeScript 4.4 est disponible en version Release Candidate

Par:
fredericmazue

mar, 24/08/2021 - 16:08

Le 12 août dernier, Microsoft a annoncé la disponibilité de Typescript 4.4 en Release Candidate. Cette nouvelle mouture du langage apporte principalement une meilleure analyse du flux de contrôle des conditions d'alias et l'introduction du drapeau --useUnknownInCatchVariables

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

En JavaScript, nous devons souvent sonder une variable de différentes manières pour voir si elle a un type plus spécifique que nous pouvons utiliser. TypeScript comprend ces vérifications et les appelle des gardes de type. Au lieu d'avoir à convaincre TypeScript du type d'une variable chaque fois que nous l'utilisons, le vérificateur de type exploite ce qu'on appelle l'analyse de flux de contrôle pour déduire le type dans chaque construction de langage.

Par exemple :

function foo(arg: unknown) {
    if (typeof arg === "string") {
        // We know this is a string now.
        console.log(arg.toUpperCase());
    }
}

Mais que se passe-t-il dans le cas suivant qui déplace la condition vers une constante :

function foo(arg: unknown) {
    const argIsString = typeof arg === "string";
    if (argIsString) {
        console.log(arg.toUpperCase());
        //              ~~~~~~~~~~~
        // Error! Property 'toUpperCase' does not exist on type 'unknown'.
    }
}

TypeScript a perdu l'information de type et remonte une erreur.

TypeScript 4.4 est doté d'une meilleure analyse et le code ci-dessous fontionne maintenant sans erreur.

L'indicateur --useUnknownInCatchVariables

En JavaScript, n'importe quel type de valeur peut être lancé avec throw et capturé dans une clause catch. Pour cette raison, TypeScript a historiquement typé les variables de clause catch en tant que any, et n'autorisait aucune autre annotation de type :

try {
    // Who knows what this might throw...
    executeSomeThirdPartyCode();
}
catch (err) { // err: any
    console.error(err.message); // Allowed, because 'any'
    err.thisWillProbablyFail(); // Allowed, because 'any' :(
}

Toutefois, lorsque TypeScript a ajouté le type unknown , il est devenu clair que celui-ci c'était un meilleur choix que any dans les variables de clause catch pour les utilisateurs qui souhaitent le plus haut degré d'exactitude et de sécurité de type.

Finalement, TypeScript 4.0 a permis aux utilisateurs de spécifier une annotation de type explicite unknown (ou any) sur chaque variable de clause catch. Cependant spécifier manuellement chaque clause peut vite devenir une corvée.

C'est pourquoi TypeScript 4.4 introduit un nouveau drapeau appelé --useUnknownInCatchVariables. Cet indicateur modifie le type par défaut des variables de clause de any a unknown

Ce drapeau est activé sous la famille d'options --strict. Cela signifie que si vous vérifiez votre code à l'aide de --strict, cette option sera automatiquement activée.

Pour utiliser typescript 4.4 RC, vous pouvez l'obtenir via NuGet ou utiliser npm avec la commande suivante :

npm installer typescript@rc