Guardie di tipo in Typescript | Aulab

GUIDE PER ASPIRANTI PROGRAMMATORI

Guardie di tipo in Typescript

Un caso d’uso particolare delle funzioni è quello di usarle per fare type narrowing, cioè per verificare se un dato sia di un certo tipo. Abbiamo già parlato di restringimento di tipo in Typescript, facendo esempi come il seguente: function concat(a: string | number, b: string | number): string { if (typeof a === "string")…

Lezione 21 / 30
Enza Neri
Immagine di copertina

Vuoi avviare una nuova carriera o fare un upgrade?

Trova il corso Digital & Tech più adatto a te nel nostro catalogo!

Un caso d’uso particolare delle funzioni è quello di usarle per fare type narrowing, cioè per verificare se un dato sia di un certo tipo. Abbiamo già parlato di restringimento di tipo in Typescript, facendo esempi come il seguente:

function concat(a: string | number, b: string | number): string { 
 if (typeof a === "string") return a + b; // a: string 
 return String(a) + b; 
}

Immaginiamo di voler delegare il controllo sul tipo di a a una fuzione isString

function isString(data: string | number): boolean { 
 return typeof data === "string"; 
}

Se provassimo ad usare questa definizione dentro l’if di concat, TypeScript non ne sarebbe troppo convinto: 

function isString(data: string | number): boolean { 
 return typeof data === "string"; 
} 
function concat(a: string | number, b: string | number): string { 
 if (isString(a)) return a + b; // Operator '+' cannot be applied to types 'string | number' and 'string | number'. 
 return String(a) + b; 
}

Possiamo chiarire a TypeScript che il booleano che esce da isString non è un booleano qualunque, ma la risposta alla domanda: “a è una stringa?”. In questo modo TypeScript può fare lo stesso type narrowing che fa nell’esempio iniziale:

function isString(data: string | number): data is string { 
 return typeof data === "string"; 
}

Usando data is string come tipo di ritorno, stiamo qualificando isString come una guardia di tipo (in inglese: type guard), cioè una funzione che TypeScript può usare per fare restringimento su una variabile.

Il nome data è totalmente arbitrario; l’importante è che la keyword is sia usata sul parametro su cui agisce la guardia

Sei indeciso sul percorso? 💭

Parliamone! Scrivici su Whatsapp e risponderemo a tutte le tue domande per capire quale dei nostri corsi è il più adatto alle tue esigenze.

Oppure chiamaci al 800 128 626