Ограничувања на генериците во TypeScript
Во една од претходните лекции креиравме функција од општ тип која требаше да ја прикаже должината на параметарот кој ѝ беше проследен. Сепак, при компајлирање добивме грешка, бидејќи не сите типови можат да имаат должина:
function myFunc < T > (data: T): T {
console.log(data.length); // грешка
return data;
}
Во тој случај ја поправивме ситуацијата, менувајќи го
генеричкиот тип во тип на генеричка низа.
Но во TypeScript постои можност да се создадат
ограничувања на генериците. За ова, во аглестите
загради, по променливата T пишуваме
клучен збор extends. После него
во кадрави загради запишуваме нова
променлива str од тип на стринг.
Остатокот од кодот на функцијата ќе остане без
промени:
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);
Врз основа на примерот, разгледан во лекцијата, зададете функција за наоѓање на должината на нумеричка низа.