Begränsningar av generics i TypeScript
I en av de tidigare lektionerna skapade vi en funktion av generisk typ som skulle skriva ut längden på parametern som skickades till den. Men vid kompilering fick vi ett fel, eftersom inte alla typer kan ha en längd:
function myFunc < T > (data: T): T {
console.log(data.length); // fel
return data;
}
I det fallet löste vi situationen genom att ändra
den generiska typen till en typ av generisk array.
Men i TypeScript finns det en möjlighet att skapa
begränsningar för generics. För att göra detta skriver vi,
i vinkelparenteserna, efter variabeln T,
nyckelordet extends. Efter det
skriver vi inom klammerparenteser en ny
variabel str av strängtyp.
Resten av funktionskoden förblir oförändrad:
function myFunc <T extends {str: string}> (data: T): void {
console.log(data.str.length);
}
Det visar sig att den generiska typen ärver typen av
variabeln str, specificerad i klammerparenteserna.
Låt oss nu kontrollera vår funktions arbete
och skapa en variabel myStr,
som refererar till typen str, och tilldela
den ett värde inom klammerparenteser:
let myStr: {str: string} = {str: 'abcde'};
Låt oss anropa funktionen myFunc, utan
att glömma att återigen specificera dess typ och skicka
variabeln myStr som en parameter:
myFunc <{str: string}> (myStr);
Baserat på exemplet som granskades i lektionen, skapa en funktion för att hitta längden av en numerisk array.