Korišćenje tipskih parametara u ograničenjima generika u TypeScript-u
TypeScript takođe omogućava deklarisanje jednog tipskog parametra koji će biti ograničen drugim tips kim parametrom. Ovo je neophodno kada treba kopirati svojstva iz jednog objekta u drugi, i pri tome se osigurati da ne prosledimo suvišno svojstvo.
Hajde da pogledamo sledeći primer. Ponovo
vratimo na funkciju myFunc koja određuje
dužinu promenljive:
function myFunc <T> (data: T): T {
console.log(data.length); // greška
return data;
}
Međutim, sada želimo da ova funkcija
radi samo sa onim tipovima koji
imaju svojstvo length. Za to ćemo napraviti
interfejs ILength, i dodelićemo mu
svojstvo length numeričkog tipa:
interface ILength {
length: number;
}
Zatim u našoj funkciji ćemo postaviti generički
tip, koji nasleđuje od ILength
preko ključne reči extends:
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Ovako izgleda naš puni kod:
interface ILength {
length: number;
}
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Hajde da proverimo rad naše funkcije i pronađemo dužinu stringa:
console.log(myFunc('abcde'));
Rezultat izvršenog koda:
5
'abcde'
A sada prosledimo parametar niz:
console.log(myFunc(['a', 'b', 'c']));
Rezultat izvršenog koda:
3
[ 'a', 'b', 'c' ]