L'opérateur 'satisfaits' dans TypeScript

Valider que le type d'une expression correspond à un certain type, sans modifier le type résultant de cette expression

TypeScript 4.9 satisfait

Avec la version 4.9, TypeScript introduit un nouvel opérateur appelé l'opérateur "satisfait". Son but est de rendre les ensembles de types non homogènes plus flexibles en permettant à une union de types de satisfaire le type global.

Correction d'une erreur de type avec Record<>

Le meilleur exemple pour illustrer ce nouvel opérateur utilise un type "Record", où les types des valeurs peuvent différer.

type Keys = "alpha" | "beta" | "gamma";

const variants = {
  alpha: 0,
  beta: 1,
  gamma: "three"
} satisfies Record<Keys, string | number>;

// With the new 'satisfies'-operator,
// the types for each of the properties
// is correctly inferred.
const otherBeta = variants.beta + 10;
const gammeUppercase = variants.gamma.toUpperCase();

Comme vous pouvez le voir, le nouveau code permet de déduire correctement le type valide pour la clé donnée. Cela ne serait pas possible avant TypeScript 4.9. Le compilateur se plaindrait que la valeur pourrait être de type chaîne ou nombre, alors que maintenant le compilateur déduit correctement le type spécifique.

Contrainte de nom de propriété

Nous pouvons également utiliser le nouvel opérateur pour indiquer au compilateur qu'il est acceptable qu'un ensemble n'inclue que certaines clés données, mais n'en accepte pas d'autres.

type Keys = "alpha" | "beta" | "gamma";

const variants = {
    alpha: "value",
    beta: 0,
    // The compiler will show an error,
    // as 'delta' is not part of the keys.
    delta: new Date()
} satisfies Partial<Record<Keys, unknown>>;

Plus d'exemples

Pour une liste complète d'exemples avec des descriptions détaillées, je recommande fortement le numéro original de cette fonctionnalité sur Github, où l'auteur décrit de nombreux cas d'utilisation (lien également dans l'addendum).