Inferred Type Predicates
TypeScript 🟡 MidDéfinition
Depuis TypeScript 5.5 (20 juin 2024), le compilateur infère lui-même le prédicat de type (x is T) d'une fonction dont le corps se réduit à une vérification de type sur son paramètre. Le cas emblématique : arr.filter(x => x !== undefined) renvoie désormais T[] et non (T | undefined)[], sans annotation manuelle.
Analogie
Le videur qui, en vous voyant sortir la carte d'identité, comprend tout seul ce qu'il vérifie.
Exemple de code
const valeurs: (number | undefined)[] = [1, undefined, 3];
// TS 5.5 : inféré comme (x) => x is number
const nombres = valeurs.filter(x => x !== undefined);
nombres.map(n => n.toFixed(1)); // n: number, plus d'erreur
// Fonction nommée : signature inférée `pet is Fish`
function estPoisson(p: Fish | Bird) {
return 'swim' in p;
}
Cas d'usage
Filtrage de tableaux, nettoyage de valeurs nulles, découpage d'unions sans écrire de type guard explicite.
Anti-pattern
Termes liés
En entretien
Qu'est-ce que les inferred type predicates apportent depuis TypeScript 5.5 ?
Le compilateur infère lui-même le prédicat de type (x is T) d'une fonction dont le corps se réduit à une vérification de type sur son paramètre. Le cas emblématique est arr.filter(x => x !== undefined), qui renvoie désormais T[] sans annotation manuelle.
Pourquoi continuer à écrire des prédicats manuels partout est un anti-pattern maintenant ?
Parce que ça masque l'inférence automatique du compilateur, et un prédicat manuel faux est cru aveuglément par TypeScript. Autant laisser le compilateur l'inférer quand c'est possible, c'est plus sûr.
Fiche mise à jour le 2026-09-27