TypeScriptда типик ўзгарувчилар

Женерик тушунчасини яхширок тушуниш учун келайлик, биринчи функциямизни - аёллик функцисяси яратайлик. Бундай функцися ўзига берилган нарсани айнан ўша типи билан қайтаради.

Келайлик, аввалбошда функциямизнинг вариантларини алаҳида ёзайлик.

Параметри сифатида сон қабул қиладиган ва сон қайтарадиган функцияни ёзайлик:

typescriptfunction func(data: number): number {
  return data;
}

Энди параметри сифатида сатр қабул қиладиган ва сатр қайтарадиган функцияни ёзайлик:

typescriptfunction func(data: string): string {
  return data;
}

Энди биз буларнинг ҳаммасини битта функция бажаришини хоҳлаймиз. Яъни биз умумийлаштириш амалга оширмоқчимиз.

Бунинг учун биз типик ўзгарувчи дан фойдаланамиз, у маълумот турларини ўзида сақлайди. Бундай ўзгарувчи функция параметрлари билан турғизғуч қавслар олдидаги бурчакли қавсларда эълон қилинади. Келайлик, уни T ном билан эълон қилайлик (исталган ном бериш мумкин):

typescriptfunction func <T>(бу ерда параметрлар) {
  return data;
}

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

Параметримизга турни ўзгарувчимиз шаклида кўрсатайлик:

typescriptfunction func <T>(data: T) {
  return data;
}

Натижада параметр қандайдир турда ўтказилиши мумкин бўлади, ва бу тур бизнинг T ўзгарувчимизда сақланади.

Энди T ўзгарувчисининг қийматини функция натижасини кўрсатиш учун ишлатайлик:

typescriptfunction func <T>(data: T): T {
  return data;
}

Энди функция натижасининг тури параметр туридан олинади. Келайлик, текширайлик.

Функцияни сон билан чақирайлик:

typescriptconsole.log( func(3) );   // 3 ни чиқаради

Функцияни сатр билан чақирайлик:

typescriptconsole.log( func('x') ); // 'x' ни чиқаради
Задание 1

Параметри сифатида ёки иккита сон, ёки иккита сатр қабул қиладиган функция яратинг. Функция ўз натижаси сифатида параметрлар йиғиндисини қайтариши керак.