Sobes.tech
Middle

Použili ste už diskriminačné unie a type guards? Aké zabudované type guards poznáte?

sobes.tech AI

Odpoveď od AI

Discriminated unions (discriminated unions) a type guards (strážcovia typov) sú mocné nástroje v TypeScripte na prácu s unijnými typmi, ktoré umožňujú bezpečne určiť konkrétny typ v rámci unie.

Discriminated unions sú unijné typy, kde každý typ má spoločný literálny kľúč (napríklad pole type), pomocou ktorého je možné jednoznačne určiť konkrétny typ.

Type guards sú funkcie alebo konštrukcie, ktoré kontrolujú typ premennej počas behu a zužujú ho pre kompilátor.

Vstavané guards v TypeScripte:

  • typeof — pre primitívne typy (string, number, boolean)
  • instanceof — na kontrolu príslušnosti ku triede
  • in — na kontrolu, či vlastnosť existuje v objekte

Príklad diskriminovanej unie a guardu typu:

interface Štvorec {
  kind: 'square';
  size: number;
}

interface Kruh {
  kind: 'circle';
  radius: number;
}

type Tvar = Štvorec | Kruh;

function plocha(tvar: Tvar): number {
  switch (tvar.kind) {
    case 'square':
      return tvar.size * tvar.size;
    case 'circle':
      return Math.PI * tvar.radius ** 2;
  }
}

Tu je kind diskriminátor a switch funguje ako guard typu.

Použitie vstavaných guardov typu:

function jeString(hodnota: unknown): hodnota is string {
  return typeof hodnota === 'string';
}

if (jeString nieco) {
  // tu je `nieco` typu string
}