TypeScriptda generiklar cheklovlarida tip parametrlaridan foydalanish
Shuningdek, TypeScriptda boshqa tip parametri bilan cheklangan tip parametrini e'lon qilish imkoniyati mavjud. Bu, bir ob'ektning xususiyatlarini boshqa ob'ektga nusxalash kerak bo'lganda zarur, shu bilan birga ortiqcha xususiyat uzatilishidan himoya qilinadi.
Keling, quyidagi misolni ko'rib chiqaylik. Yana
o'zgaruvchi uzunligini aniqlovchi myFunc
funksiyasiga qaytaylik:
function myFunc <T> (data: T): T {
console.log(data.length); // xato
return data;
}
Biroq, endi biz bu funksiya faqat length
xususiyatiga ega bo'lgan turlar bilan ishlashini
xohlaymiz. Buning uchun ILength interfeysini
yaratamiz va unga length raqamli tipidagi
xususiyatini belgilaymiz:
interface ILength {
length: number;
}
Keyin, bizning funksiyamizda extends kalit
so'zi orqali ILength dan meros oladigan
umumiy tipni belgilaymiz:
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Bizning to'liq kodimiz shunday ko'rinadi:
interface ILength {
length: number;
}
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Keling, funksiyamizning ishlashini tekshiramiz va qator uzunligini topamiz:
console.log(myFunc('abcde'));
Bajarilgan kod natijasi:
5
'abcde'
Endi parametrga massiv uzatamiz:
console.log(myFunc(['a', 'b', 'c']));
Bajarilgan kod natijasi:
3
[ 'a', 'b', 'c' ]