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:
function 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:
interface 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:
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Kështu duket kodi ynë i plotë:
interface 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:
console.log(myFunc('abcde'));
Rezultati i kodit të ekzekutuar:
5
'abcde'
Dhe tani le t'i kalojmë si parameter një array:
console.log(myFunc(['a', 'b', 'c']));
Rezultati i kodit të ekzekutuar:
3
[ 'a', 'b', 'c' ]