Vincoli delle generics in TypeScript
In una delle lezioni precedenti, abbiamo creato una funzione di tipo generico che avrebbe dovuto restituire la lunghezza del parametro passato. Tuttavia, durante la compilazione, abbiamo riscontrato un errore poiché non tutti i tipi possono avere una lunghezza:
function myFunc < T > (data: T): T {
console.log(data.length); // errore
return data;
}
In quel caso, abbiamo risolto la situazione modificando
il tipo generico in un tipo di array generico.
Ma in TypeScript c'è la possibilità di creare
dei vincoli per le generics. Per fare questo, dopo la variabile
T nelle parentesi angolari, scriviamo
la parola chiave extends. Dopo di essa,
nelle parentesi graffe, dichiariamo una nuova
variabile str di tipo stringa.
Il resto del codice della funzione rimarrà invariato:
function myFunc <T extends {str: string}> (data: T): void {
console.log(data.str.length);
}
Quindi, il tipo generico eredita il tipo
della variabile str, specificata tra parentesi
graffe. Ora verifichiamo il funzionamento
della nostra funzione e creiamo una variabile myStr,
che fa riferimento al tipo str, e assegniamole
un valore tra parentesi graffe:
let myStr: {str: string} = {str: 'abcde'};
Chiamiamo la funzione myFunc, senza
dimenticare di specificare nuovamente il suo tipo e passiamo
la variabile myStr come parametro:
myFunc <{str: string}> (myStr);
Basandoti sull'esempio considerato nella lezione, crea una funzione per trovare la lunghezza di un array numerico.