TypeScriptте женериктердин чектөөлөрүндө тип параметрлерин колдонуу
TypeScriptте бир тип параметрин экинчи бир тип параменти менен чектөө мүмкүнчүлүгү да бар. Бул бир объекттен касиеттерди экинчи объектке көчүрүп жатканда, ашыкча касиет бербөөбүзгө кепилдик берүү үчүн зарыл.
Келгиле, төмөнкү мисалды карап көрөлү. Дагы
бир жолу өзгөрмөнүн узундугун аныктоочу
myFunc функциясына кайталайлы:
function myFunc <T> (data: T): T {
console.log(data.length); // ката
return data;
}
Бирок азыр биз бул функциянын гана length
касиети бар типтер менен иштешин каалайбыз.
Бул үчүн ILength интерфейсин түзөбүз,
ага сандык типтеги length касиетин беребиз:
interface ILength {
length: number;
}
Андан кийин биздин функциябызда extends
ачкыч сөзү аркылуу ILength дан мураска
алган жалпыланган типти беребиз:
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' ]