Aller au contenu

Inférence des littéraux

L’inférence des littéraux est une fonctionnalité de TypeScript qui permet d’inférer le type d’une variable ou d’un paramètre à partir de sa valeur.

Dans l’exemple suivant, nous pouvons voir que TypeScript considère x comme un type littéral, car sa valeur ne peut plus être modifiée ultérieurement, tandis que y est inféré comme une chaîne puisqu’il peut être modifié ultérieurement.

const x = 'x'; // Literal type of 'x', because this value cannot be changed
let y = 'y'; // Type string, as we can change this value

Dans l’exemple suivant, nous pouvons voir que o.x a été inféré comme un string (et non comme le littéral a), car TypeScript considère que la valeur peut être modifiée ultérieurement.

type X = 'a' | 'b';
let o = {
x: 'a', // This is a wider string
};
const fn = (x: X) => `${x}-foo`;
console.log(fn(o.x)); // Argument of type 'string' is not assignable to parameter of type 'X'

Comme vous pouvez le constater, le code génère une erreur lors du passage de o.x à fn, car X est un type plus étroit.

Nous pouvons résoudre ce problème en utilisant une assertion de type avec const ou le type X :

let o = {
x: 'a' as const,
};

ou :

let o = {
x: 'a' as X,
};