Visionner la vidéo

Typescript 5.5 Amélioration de l'inférence de type

  Typescript

Introduction

Aujourd’hui, nous allons découvrir l’une des améliorations les plus importantes de la version 5.5 de TypeScript : le renforcement de l’inférence de types.

Cette mise à jour corrige un problème majeur qui existe depuis les débuts de TypeScript, rendant le typage plus intelligent et efficace.

Nous allons comparer les versions 5.4 et 5.5 de TypeScript à travers trois exemples pratiques. Vous verrez comment la nouvelle version améliore la gestion des types et facilite le développement.

Premier Exemple

const array = [1, 2, null, 3];

const numbers = array.filter((item) => item !== null);

// cette ligne de code ne indique une erreur avec TypeScript 5.4
numbers.forEach((item) => console.log(item + 1));

Nous avons un tableau qui contient des nombres et une valeur null.

Avec TypeScript 5.5, l’inférence de type devient plus intelligente et reconnaît que le tableau numbers ne contient que des types number après le filtrage.

En Typescript 5.4 l’instruction console.log est en erreur, car Typescript indique que la variable item peut être de type null ou number.

Deuxième Exemple

Voyons un deuxième exemple où le tableau contient des nombres, des null et des chaînes de caractères.

const array = [1, 2, null, 3, "toto"];

function isNumber(value: any) {
  return typeof value === "number";
}

const numbers = array.filter(isNumber);

// cette ligne de code ne indique une erreur avec TypeScript 5.4
numbers.forEach((item) => console.log(item + 1));

Avec TypeScript 5.5, le type inféré pour numbers est uniquement un tableau de type number, grâce à la fonction isNumber.

En Typescript 5.4 l’instruction console.log est en erreur, car Typescript indique que la variable item peut être de type null ou number ou string.

Troisième exemple

Pour terminer, voyons un troisième exemple avec un type complexe MyObject.

type MyObject = Record<string, number | string>;

function printNumber(obj: MyObject, key: string) {
  if (typeof obj[key] === "number") {
    // cette ligne de code ne indique une erreur avec TypeScript 5.4 
    console.log(obj[key] + 1);
  }
}

Avec TypeScript 5.5, l’inférence de type est suffisamment intelligente pour reconnaître que l’accès à la propriété est de type number sans avoir besoin de variable intermédiaire.

Pour faire fonctionner cette fonction avec Typescript 5.4, il est nécessaire de déclarer une variable intermédiaire :

type MyObject = Record<string, number | string>;

function printNumber(obj: MyObject, key: string) {
  const value = obj[key]; 
  if (typeof value === "number") { 
    console.log(value + 1); 
  }
}

Conclusion

La version 5.5 de TypeScript marque une avancée significative dans l’évolution du langage, particulièrement en ce qui concerne l’inférence de types.

Cette amélioration corrige des limitations historiques en offrant une analyse plus précise et intelligente des types.

L’inférence de type renforcée de TypeScript 5.5 simplifie le développement en permettant une meilleure compréhension et manipulation des structures de données complexes. Cela se traduit par un code plus propre et plus maintenable, sans avoir à recourir à des contournements ou à des vérifications excessives.

Commentaires