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 функсиясини чақириб,
унing турini янада кўрсатиб ўтирмаймиз ва
myStr ўзгарувчисини параметр сифатида
узатамиз:
myFunc <{str: string}> (myStr);
Дарсда кўриб чиқилган мисол асосида, сонли массивнинг узунлигини топиш учун функсия беринг.