A 'satisfies'-operátor a TypeScriptben

Érvényesítse, hogy egy kifejezés típusa egyezik-e valamilyen típussal, anélkül, hogy megváltoztatná a kifejezés eredményül kapott típusát

A TypeScript 4.9 megfelel

A 4.9-es verzióval a TypeScript új operátort vezet be, a „satisfies” operátort. Célja, hogy a nem homogén típuskészleteket rugalmasabbá tegye azáltal, hogy lehetővé teszi a típusok egyesülését, hogy kielégítse az általános típust.

Javítsa ki a típushibát a Record<> segítségével

A legjobb példa ennek az új operátornak a bemutatására egy „Record”-típust használ, ahol az értékek típusai eltérhetnek.

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

Mint látható, az új kód lehetővé teszi az adott kulcs érvényes típusának helyes következtetését. Ez a TypeScript 4.9 előtt nem lenne lehetséges. A fordító kifogásolja, hogy az érték karakterlánc vagy szám típusú lehet, míg most a fordító helyesen következtet az adott típusra.

Tulajdonságnév kényszer

Az új operátort arra is használhatjuk, hogy utasítsuk a fordítót, hogy rendben van, ha egy készlet csak néhány megadott kulcsot tartalmaz, de másokat nem.

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

További példák

A részletes leírásokkal rendelkező példák teljes listájához erősen ajánlom ennek a funkciónak a Githubon található eredeti kiadását, ahol a szerző számos használati esetet ír le (link a mellékletben is).