TypeScriptте женериктердин чектөөлөрүндө тип параметрлерин колдонуу
TypeScriptте бир тип параметрин экинчи бир тип параменти менен чектөө мүмкүнчүлүгү да бар. Бул бир объекттен касиеттерди экинчи объектке көчүрүп жатканда, ашыкча касиет бербөөбүзгө кепилдик берүү үчүн зарыл.
Келгиле, төмөнкү мисалды карап көрөлү. Дагы
бир жолу өзгөрмөнүн узундугун аныктоочу
myFunc функциясына кайталайлы:
typescriptfunction myFunc <T> (data: T): T {
console.log(data.length); // ката
return data;
}
Бирок азыр биз бул функциянын гана length
касиети бар типтер менен иштешин каалайбыз.
Бул үчүн ILength интерфейсин түзөбүз,
ага сандык типтеги length касиетин беребиз:
typescriptinterface ILength {
length: number;
}
Андан кийин биздин функциябызда extends
ачкыч сөзү аркылуу ILength дан мураска
алган жалпыланган типти беребиз:
typescriptfunction myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Биздин коддун толук түрү төмөнкүдөй:
typescriptinterface ILength {
length: number;
}
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Келгиле, биздин функциябыздын иштешин текшерип, саптын узундугун табалы:
typescriptconsole.log(myFunc('abcde'));
Аткарылган коддун натыйжасы:
typescript5
'abcde'
Азыр параметрге массив берели:
typescriptconsole.log(myFunc(['a', 'b', 'c']));
Аткарылган коддун натыйжасы:
typescript3
[ 'a', 'b', 'c' ]