Përdorimi i Parametrave Tipike në Kufizimet e Gjenerikëve në TypeScript

Gjithashtu në TypeScript ekziston mundësia e deklarimit të një parametri tipik, i cili do të kufizohet nga një parametër tjetër tipik. Kjo është e nevojshme kur është e nevojshme të kopjohen vetitë nga një objekt në një tjetër, duke u siguruar njëkohësisht që të mos kalojmë veti të panevojshme.

Le të shqyrtojmë shembullin e mëposhtëm. Përsëri le t'i kthehemi funksionit myFunc, i cili përcakton gjatësinë e një variable:

typescriptfunction myFunc <T> (data: T): T {
  console.log(data.length); // gabim
  return data;
}

Sidoqoftë, tani ne duam që ky funksion të punojë vetëm me ato tipe, të cilat kanë vetinë length. Për këtë, le të krijojmë interfaqen ILength, së cilës i caktojmë vetinë length të tipit numerik:

typescriptinterface ILength {
  length: number;
}

Më pas, në funksionin tonë le të përcaktojmë një tip gjenerik, i cili trashëgon nga ILength përmes fjalës kyçe extends:

typescriptfunction myFunc <T extends ILength> (data: T): T {
  console.log(data.length);
  return data;
}

Kështu duket kodi ynë i plotë:

typescriptinterface ILength {
  length: number;
}

function myFunc <T extends ILength> (data: T): T {
  console.log(data.length);
  return data;
}

Le të kontrollojmë funksionimin e funksionit tonë dhe të gjejmë gjatësinë e stringut:

typescriptconsole.log(myFunc('abcde'));

Rezultati i kodit të ekzekutuar:

typescript5
'abcde'

Dhe tani le t'i kalojmë si parameter një array:

typescriptconsole.log(myFunc(['a', 'b', 'c']));

Rezultati i kodit të ekzekutuar:

typescript3
[ 'a', 'b', 'c' ]