Маҳдудиятҳои умумӣ дар 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);
Бар асоси мисоли дар дарс баррасӣшуда, функсияро барои ёфтани дарозии массиви ададӣ таъин кунед.