TypeScriptда умумийланганларнинг чекловлари

Олдинги дарсларнинг бирида биз ўзига киритилган параметрнинг узунлигини чиқариши керек бўлган умумий турдаги функсия яратган эдик. Аммо компиляция пайтида хатолик юз берди, чунки ҳамма турлар узунликка эга бўла олмайди:

typescriptfunction myFunc < T > (data: T): T {
  console.log(data.length); // хатолик
  return data;
}

У ҳолда биз вазиятни ўзгартириб, умумий турни умумий массив турига алмаштириб түзетган эдик. Лекин TypeScriptда умумийланганларни чеклаш имконияти мавжуд. Буни амалга ошириш учун бурчак қавслар ичида, T ўзгарувчисидан кейин extends калит сўзини ёзамиз. Ундан кейин жиңғоқ қавслар ичида str сатр туридаги янги ўзгарувчини ёзамиз. Функсиянинг қолган қисми ўзгартирилмай қолади:

typescriptfunction myFunc <T extends {str: string}> (data: T): void {
  console.log(data.str.length);
}

Маълум бўлдики, умумий тур жиңғоқ қавсларда кўрсатилган str ўзгарувчисининг туридан мерос олади. Энди бизнинг функсиямизнинг ишлашини текшириб кўрамиз ва str турига ишора қилувчи myStr ўзгарувчисини яратиб, унга жиңғоқ қавслар ичида қиймат берамиз:

typescriptlet myStr: {str: string} = {str: 'abcde'};

Келинг, myFunc функсиясини чақириб, унing турini янада кўрсатиб ўтирмаймиз ва myStr ўзгарувчисини параметр сифатида узатамиз:

typescriptmyFunc <{str: string}> (myStr);
Задание 1

Дарсда кўриб чиқилган мисол асосида, сонли массивнинг узунлигини топиш учун функсия беринг.