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' ]