Користење на типови параметри во ограничувањата на генериците во 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' ]