Typescript 5.5 Amélioration de l'inférence de type
TypescriptIntroduction
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.