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:

typescriptfunction 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:

typescriptinterface ILength {
  length: number;
}

Zatim u našoj funkciji ćemo postaviti generički tip, koji nasleđuje od ILength preko ključne reči extends:

typescriptfunction myFunc <T extends ILength> (data: T): T {
  console.log(data.length);
  return data;
}

Ovako izgleda naš puni kod:

typescriptinterface 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:

typescriptconsole.log(myFunc('abcde'));

Rezultat izvršenog koda:

typescript5
'abcde'

A sada prosledimo parametar niz:

typescriptconsole.log(myFunc(['a', 'b', 'c']));

Rezultat izvršenog koda:

typescript3
[ 'a', 'b', 'c' ]