Middle
Használta már diszkrimináns uniókat és type guardokat? Milyen beépített type guardokat ismer?
sobes.tech MI
Válasz az MI-től
Diszkriminált uniók (discriminated unions) és típusvédők (type guards) erőteljes eszközök a TypeScript-ben, amelyek lehetővé teszik egy unió típuson belüli konkrét típus biztonságos meghatározását.
Diszkriminált uniók olyan típusuniók, ahol minden típusnak van egy közös literális kulcsa (például a type mező), amely alapján egyértelműen meghatározható egy adott típus.
Típusvédők (type guards) olyan függvények vagy szerkezetek, amelyek futásidőben ellenőrzik egy változó típusát, és szűkítik a típusát a fordító számára.
A TypeScript beépített típusvédői:
typeof— primitív típusokhoz (string,number,boolean)instanceof— osztályhoz tartozás ellenőrzésein— egy tulajdonság meglétének ellenőrzése egy objektumban
Példa diszkriminált unióra és típusvédőre:
interface Négyzet {
kind: 'square';
size: number;
}
interface Kör {
kind: 'circle';
radius: number;
}
type Forma = Négyzet | Kör;
function terület(forma: Forma): number {
switch (forma.kind) {
case 'square':
return forma.size * forma.size;
case 'circle':
return Math.PI * forma.radius ** 2;
}
}
Itt a kind a diszkriminátor, a switch pedig típusvédőként működik.
A beépített típusvédők használata:
function isString(érték: unknown): érték is string {
return typeof érték === 'string';
}
if (isString(valami)) {
// itt, a valami string típusú
}