De meilleures performances pour TypeScript 3.5 grâce à la correction d'un bug de regression

Par:
fredericmazue

ven, 31/05/2019 - 12:38

Microsoft a annoncé la disponibilité de TypeScript 3.5. Une mouture qui présente de meilleures performances que TypeScript 3.3.

Quid de TypeScript 3.4 ? En fait TypeScript 3.5 corrige un bug de régression apparu avec TypeScript 3.4. Ce bug induisait une 'explosion' du travail' que devait fournir le vérificateur de type, ce qui allongeait notablement les temps de construction, mais aussi des éditions de code TypeScript et JavaScript insupportablement lentes, précise Microsoft. Grâce à ce correctif et aussi grâce à plusieurs optimisations, TypeScript 3.5 présente des performances supérieures à TypeScript 3.3, souligne Microsoft.

Le type d'assistance Omit

Celui-ci est une nouveauté de TypeScript 3.5 à remarquer. Ce type intervient lorsqu'il s'agit de créer un objet en omettant certaines propriétés. Soit par exemple le type Person :

type Person = {
    name: string;
    age: number;
    location: string;
};

Grâce aux aides Pick et Exclude intégrées à TypeScript, il est possible d'écrire :

type RemainingKeys = Exclude<keyof Person, "location">;
type QuantumPerson = Pick<Person, RemainingKeys>;

Ce qui est équivalent à :

type QuantumPerson = {
    name: string;
    age: number;
};

Pour faciliter cette écriture, il serait possible d'écrire ceci :

type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;

C'est justement ce que fait le type Omit inclus dans lib.d.ts.

Un meilleur contrôle des propriétés excédentaires dans les type d'Union

Auparavant le code suivant passait entre les mailles du filet du vérificateur de types :

type Point = {
    x: number;
    y: number;
};

type Label = {
    name: string;
};

const thing: Point | Label = {
    x: 0,
    y: 0,
    name: true // oups!
};

Avec TypeScript 3.5, seul ce code est valide :

const pl: Point | Label = {
    x: 0,
    y: 0,
    name: "origin" // ok
};

Le lecteur retrouvera toutes les autres nouveautés amenées par TypeScript 3.5 dans le billet mentionné ci-dessus. TypeScript 3.6 est prévu pour août 2019. Il apportera notamment des générateurs et des itérateurs fortement typés.