TypeScript 4.5

Par:
fredericmazue

jeu, 18/11/2021 - 15:57

Microsoft a annoncé la disponibilité de son langage TypeScript en version 4.5. Il est à remarquer tout d'abord que la prise en charge du module ECMAScript pour Node.js 12, annoncée lors de la sortie de TypeScript 4.5 bêta, a été reportée. Ce support n'est disponible qu'à titre expérimental dans les nightly builds du langage. Microsoft ne donne pas de date pour l'arrivée de ce support en version finale.

La nouveauté la plus marquante de TypeScript 4.5 est l'arrivée du type Awaited et les améliorations que cela apporte aux Promise. Awaited est un type utilitaire. Ce type est destiné à modéliser des opérations comme await dans les fonctions async, ou la méthode .then sur les Promise.

// A = string
type A = Awaited<Promise<string>>;

// B = number
type B = Awaited<Promise<Promise<number>>>;

// C = boolean | number
type C = Awaited<boolean | Promise<number>>;

Microsoft souligne que le type Awaited peut être utile pour modéliser les API existantes, y compris les fonctionnalitées JavaScript intégrées comme Promise.all et Promise.race, Microsoft précise que ce sont certains des problèmes liés à l'inférence avec Promise.all qui ont motivé la création du type Awaited. Microsoft donne cet exemple qui échoue dans TypeScript 4.4 ainsi que dans les versions antérieures :

declare function MaybePromise<T>(value: T): T | Promise<T> | PromiseLike<T>;

async function doSomething(): Promise<[number, number]> {
    const result = await Promise.all([
        MaybePromise(100),
        MaybePromise(200)
    ]);

    // Error!
    //
    //    [number | Promise<100>, number | Promise<200>]
    //
    // is not assignable to type
    //
    //    [number, number]
    return result;
}

Maintenant, Promise.all combine certaines fonctionnalités avec le type Awaited, ce qui donne de bien meilleurs résultats d'inférence, et l'exemple ci-dessus fonctionne.