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
айнымалысының түрін мұралайды. Енді функциямыздың жұмысын тексерейік
және str түріне сілтеме жасайтын myStr айнымалысын
жасап, оған бұйра жақшаларда мән берейік:
let myStr: {str: string} = {str: 'abcde'};
myFunc функциясын шапшаң шақырайық, оның түрін тағы да көрсетуді
ұмытпаймыз және myStr айнымалысын параметр ретінде берейік:
myFunc <{str: string}> (myStr);
Сабақта қарастырылған мысал негізінде сандық массивтің ұзындығын табу функциясын жазыңыз.