Covariance / Contravariance

TypeScript 🔴 Senior

Définition

Covariance: un sous-type peut remplacer le type parent (sortie). Contravariance: le type parent peut remplacer le sous-type (entrée). Déterminé la compatibilité des generics.

Analogie

Covariance: un chien peut passer la ou un animal est attendu (du spécifique au général). Contravariance: l'inverse pour les consommateurs.

Exemple de code

// Covariant: retour de fonction
type Getter<T> = () => T; // Dog -> Animal OK
// Contravariant: parametre de fonction
type Setter<T> = (val: T) => void; // Animal -> Dog OK

Cas d'usage

Comprendre pourquoi certaines assignations génériques échouent et concevoir des APIs correctement typées.

Termes liés

#advanced#interview#type-system

En entretien

  1. Explique-moi la différence entre covariance et contravariance en TypeScript.

    La covariance permet à un sous-type de remplacer le type parent en sortie, la contravariance permet à l'inverse au type parent de remplacer le sous-type en entrée.

  2. Pourquoi c'est utile à comprendre en pratique ?

    Ça explique pourquoi certaines assignations génériques échouent et permet de concevoir des APIs correctement typées.

  3. Donne un exemple concret de chaque cas.

    Un `Getter<T>` est covariant, un Dog peut remplacer un Animal en retour ; un `Setter<T>` est contravariant, un Animal peut remplacer un Dog en paramètre.

Fiche mise à jour le 2026-09-27

← → au clavier pour passer d'une fiche à l'autre