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:
function 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:
function 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:
let 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:
myFunc <{str: string}> (myStr);
Pamatojoties uz nodarbībā apskatīto piemēru, izveidojiet funkciju skaitliskā masīva garuma noteikšanai.