L'operatore 'soddisfa' in TypeScript

Convalida che il tipo di un'espressione corrisponda a un tipo, senza modificare il tipo risultante di tale espressione

TypeScript 4.9 soddisfa

Con la versione 4.9, TypeScript introduce un nuovo operatore chiamato operatore "soddisfa". Il suo scopo è rendere più flessibili insiemi di tipi non omogenei consentendo un'unione di tipi per soddisfare il tipo generale.

Correggi l'errore di tipo con Record<>

Il miglior esempio per dimostrare questo nuovo operatore utilizza un tipo "Record", in cui i tipi dei valori possono differire.

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();

Come puoi vedere, il nuovo codice permette di dedurre correttamente il tipo valido per la chiave data. Questo non sarebbe stato possibile prima di TypeScript 4.9. Il compilatore si lamenterebbe del fatto che il valore potrebbe essere di tipo string o number, mentre ora il compilatore deduce correttamente il tipo specifico.

Nome proprietà vincolante

Possiamo anche usare l'operatore new per indicare al compilatore che va bene che un set includa solo alcune chiavi date, ma non ne accetti altre.

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>>;

Altri esempi

Per un elenco completo di esempi con descrizioni approfondite, consiglio vivamente il numero originale di questa funzionalità su Github, in cui l'autore descrive molti casi d'uso (link anche nell'addendum).