Употреба типских параметара у ограничењима генерика у TypeScript-у
Такође, у TypeScript-у постоји могућност декларисања једног типског параметра који ће бити ограничен другим типским параметром. Ово је неопходно када треба копирати својства из једног објекта у други, при том осигуравајући се да не проследимо вишак својстава.
Хајде да размотримо следећи пример. Поново
се вратимо на функцију myFunc која одређује
дужину променљиве:
function myFunc <T> (data: T): T {
console.log(data.length); // грешка
return data;
}
Међутим, сада желимо да ова функција
ради само са оним типовима који
имају својство length. За то ћемо направити
интерфејс ILength, којем ћемо задати
својство length нумеричког типа:
interface ILength {
length: number;
}
Затим у нашој функцији задајмо генерички
тип, који наслеђује од ILength
преко кључне речи extends:
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Ево како изгледа наш потпуни код:
interface ILength {
length: number;
}
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Хајде да проверимо рад наше функције и пронађемо дужину ниске:
console.log(myFunc('abcde'));
Резултат извршеног кода:
5
'abcde'
А сада проследимо низ у параметар:
console.log(myFunc(['a', 'b', 'c']));
Резултат извршеног кода:
3
[ 'a', 'b', 'c' ]