TypeScript-dä umumy tipiň çäklemeleri

Öňki sapaklaryň birinde biz uzynlygy çykarmaly bolan umumy tip funksiýasyny döretdik. Emma kompilirleýän wagtymyzda ýalňyşlyk çykdy, sebäbi hemme tipler uzynlyga eýe bolup bilmeýär:

typescriptfunction myFunc < T > (data: T): T {
  console.log(data.length); // ýalňyşlyk
  return data;
}

Şol wagt biz ýagdaýy düzetdik, umumy tipi umumy massiw tipine üýtgetdik. Ýöne TypeScript-dä umumy tipiň çäklemelerini döretmek mümkinçiligi bar. Buny üçin burç ýaýlarynda, üýtgeýjiniň T-dan soň, extends açary sözüni ýazyňyz. Ondan soň, egri ýaýlarynda täze üýtgeýji str setir tipini ýazyňyz. Funksiýanyň galan kody üýtgeşikliksiz galar:

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

Demek, umumy tip, egri ýaýlarynda görkezilen str üýtgeýjisiniň tipinden miras alýar. Indi biz öz funksiýamyzyň işini barlaýarys we myStr üýtgeýjisini döredýäris, str tipine salgylanýar, we ona egri ýaýlarynda baha berýäris:

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

Geliň, myFunc funksiýasyny çagyralyň, ýene-de onuň tipini görkezmegi unutmaň we myStr üýtgeýjisini parametr hökmünde geçireliň:

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

Sapakda görlen mysala esasan, san massiwiniň uzynlygyny tapmak üçin funksiýany belgiň.