La 'satisfies'-funkciigisto en TypeScript

Konfirmu ke la speco de esprimo kongruas kun iu tipo, sen ŝanĝi la rezultan tipon de tiu esprimo

TypeScript 4.9 kontentigas

Kun versio 4.9, TypeScript prezentas novan funkciigiston nomitan la "satisfies"-funkciigisto. Ĝia celo estas igi ne-homogenajn tiparojn pli flekseblaj permesante al kuniĝo de tipoj kontentigi la totalan tipon.

Ripari tiperaron per Record<>

La plej bona ekzemplo por pruvi ĉi tiun novan funkciigiston uzas "Rekordon"-tipo, kie la tipoj de la valoroj povas malsami.

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

Kiel vi povas vidi, la nova kodo permesas ĝuste konkludi la validan tipon por la donita ŝlosilo. Ĉi tio ne eblus antaŭ TypeScript 4.9. La kompililo plendus ke la valoro povus esti de tipo ĉeno aŭ nombro, dum nun la kompililo ĝuste konkludas la specifan tipon.

Propraĵa Nomo Limigo

Ni ankaŭ povas uzi la novan funkciigiston por instrui la kompililon, ke estas bone, ke aro nur inkludu iujn donitajn ŝlosilojn, sed ne akceptu aliajn.

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

Pli da ekzemploj

Por kompleta listo de ekzemploj kun profundaj priskriboj, mi tre rekomendas la originan numeron de ĉi tiu funkcio en Github, kie la aŭtoro priskribas multajn uzkazojn (ligilo ankaŭ en la aldono).