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 triedein— 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
}