Истифода бурдани параметрҳои типӣ дар маҳдудиятҳои ҷенерикҳо дар 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' ]