Typvariabler i TypeScript
För att bättre förstå konceptet med generics låt oss skapa vår första funktion - identitetsfunktionen. En sådan funktion returnerar exakt vad som skickades till den - med samma typ.
Låt oss först skriva varianterna av vår funktion var för sig.
Låt oss skriva en funktion som tar ett nummer som parameter och returnerar ett tal:
function func(data: number): number {
return data;
}
Nu skriver vi en funktion som tar en sträng som parameter och returnerar en sträng:
function func(data: string): string {
return data;
}
Låt oss nu säga att vi vill att allt detta skall göras av en och samma funktion. Det vill säga vi vill utföra generalisering.
För detta använder vi en typvariabel,
som sparar datatypen. En sådan variabel deklareras
i vinkelparenteser före de runda parenteserna
med funktionens parametrar. Låt oss deklarera
en sådan variabel och ge den namnet T
(vilket namn som helst går bra):
function func <T>(här parametrar) {
return data;
}
Efter detta kommer vi att ha variabeln T,
som kan användas för att lägga parameterns typ i den,
och sedan
ange den som returtyp.
Låt oss ange typen för vår parameter som vår variabel:
function func <T>(data: T) {
return data;
}
Resultatet blir att parametern kan skickas
i vilken typ som helst, och den typen sparas i vår
variabel T.
Nu använder vi värdet av variabeln T
för att ange funktionens returtyp:
function func <T>(data: T): T {
return data;
}
Nu kommer det att bli så att funktionens returtyp kommer från parameterns typ. Låt oss testa.
Anropa funktionen med ett tal:
console.log( func(3) ); // skriver ut 3
Anropa funktionen med en sträng:
console.log( func('x') ); // skriver ut 'x'
Skapa en funktion som som parameter tar antingen två tal, eller två strängar. Funktionen ska returnera summan av parametrarna.