TypeScript vispārinājumu ierobežojumi

Vienā no iepriekšējām nodarbībām mēs izveidojām vispārināta tipa funkciju, kurai vajadzēja izvadīt tai nodotā parametra gārumu. Tomēr kompilācijas laikā mums tika parādīta kļūda, jo ne visiem tipiem var būt garums:

typescriptfunction myFunc < T > (data: T): T {
  console.log(data.length); // kļūda
  return data;
}

Tajā gadījumā mēs izlabojām situāciju, mainot vispārināto tipu uz vispārināta masīva tipu. Bet TypeScript ir iespēja izveidot vispārinājumu ierobežojumus. Lai to izdarītu, leņķa iekavās, aiz mainīgā T rakstām atslēgvārdu extends. Pēc tā figūriekavās ierakstām jaunu mainīgo str virknes tipā. Pārējais funkcijas kods paliks nemainīgs:

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

Izrādās, ka vispārinātais tips manto mainīgā str tipu, kas norādīts figūriekavās. Tagad pārbaudīsim mūsu funkcijas darbību un izveidosim mainīgo myStr, kas atsaucas uz tipu str, un iestatīsim tai vērtību figūriekavās:

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

Izsauksim funkciju myFunc, ne aizmirstot vēlreiz norādīt tās tipu, un nodosim mainīgo myStr kā parametru:

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

Pamatojoties uz nodarbībā apskatīto piemēru, izveidojiet funkciju skaitliskā masīva garuma noteikšanai.