Ограничения на генерализираните типове в TypeScript
В един от предишните уроци създавахме функция с генерализиран тип, която трябваше да извежда дължината на параметъра, подаден в нея. Въпреки това, при компилация получихме грешка, тъй като не всички типове могат да имат дължина:
function myFunc < T > (data: T): T {
console.log(data.length); // грешка
return data;
}
В този случай поправихме ситуацията, като променихме
генерализирания тип на тип на генерализиран масив.
Но в TypeScript има възможност да се създадат
ограничения за генерализираните типове. За това в ъгловите
скоби, след променливата T пишем
ключовата дума extends. След нея
в фигурни скоби записваме нова
променлива str от тип string.
Останалата част от кода на функцията остава без
промени:
function myFunc <T extends {str: string}> (data: T): void {
console.log(data.str.length);
}
Излиза, че генерализираният тип наследява типа
на променливата str, указана във фигурните
скоби. Сега нека проверим работата
на нашата функция и създадем променлива myStr,
която сочи към типа str, и зададем
й стойност във фигурни скоби:
let myStr: {str: string} = {str: 'abcde'};
Нека извикаме функцията myFunc, като не
забравяме отново да посочим нейния тип и подадем
променливата myStr като параметър:
myFunc <{str: string}> (myStr);
На базата на примера, разгледан в урока, задайте функция за намиране на дължината на числов масив.