Begrænsninger af generics i TypeScript
I en af de foregående lektioner oprettede vi en funktion af generisk type, som skulle udskrive længden af parameteren overført til den. Dog fik vi en fejl under kompilering, da ikke alle typer kan have en længde:
function myFunc < T > (data: T): T {
console.log(data.length); // fejl
return data;
}
I det tilfælde løste vi situationen ved at ændre
den generiske type til en type af generisk array.
Men i TypeScript er der en mulighed for at oprette
begrænsninger af generics. For at gøre dette skriver vi
nøgleordet extends efter variablen T i vinkelparenteserne.
Efter det skriver vi en ny
variable str af strengtype i krøllede parenteser.
Resten af funktionens kode forbliver uændret:
function myFunc <T extends {str: string}> (data: T): void {
console.log(data.str.length);
}
Det betyder, at den generiske type arver typen af
variablen str, angivet i krøllede parenteser.
Lad os nu teste vores funktions virkning
og oprette en variabel myStr,
der refererer til typen str, og tildele
den en værdi i krøllede parenteser:
let myStr: {str: string} = {str: 'abcde'};
Lad os kalde funktionen myFunc, uden
at glemme at angive dens type igen, og overføre
variablen myStr som en parameter:
myFunc <{str: string}> (myStr);
Baseret på eksemplet set i lektionen, angiv funktionen til at finde længden af et numerisk array.