Begrensninger på generiske typer i TypeScript
I en av de foregående leksjonene opprettet vi en funksjon av generisk type som skulle skrive ut lengden på parameteren som ble sendt inn. Men under kompilering fikk vi en feil, siden ikke alle typer kan ha en lengde:
function myFunc < T > (data: T): T {
console.log(data.length); // feil
return data;
}
Den gangen løste vi situasjonen ved å endre
den generiske typen til en generisk array-type.
Men i TypeScript er det mulighet til å opprette
begrensninger for generiske typer. For å gjøre dette
skriver vi nøkkelordet extends
etter variabelen T i vinkelparentesene.
Etter det skriver vi en ny
variabel str av strengtype i krøllparentesene.
Resten av koden i funksjonen forblir uendret:
function myFunc <T extends {str: string}> (data: T): void {
console.log(data.str.length);
}
Det betyr at den generiske typen arver typen
til variabelen str, spesifisert i krøllparentesene.
La oss nå sjekke hvordan funksjonen vår fungerer
og opprette en variabel myStr,
som refererer til typen str, og tilordne
den en verdi i krøllparenteser:
let myStr: {str: string} = {str: 'abcde'};
La oss kalle funksjonen myFunc, uten
å glemme å spesifisere typen på nytt, og sende
variabelen myStr som en parameter:
myFunc <{str: string}> (myStr);
Basert på eksemplet som ble vist i leksjonen, definer en funksjon for å finne lengden av en numerisk array.