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:

typescriptfunction 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:

typescriptinterface ILength {
  length: number;
}

Keyin, bizning funksiyamizda extends kalit so'zi orqali ILength dan meros oladigan umumiy tipni belgilaymiz:

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

Bizning to'liq kodimiz shunday ko'rinadi:

typescriptinterface 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:

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

Bajarilgan kod natijasi:

typescript5
'abcde'

Endi parametrga massiv uzatamiz:

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

Bajarilgan kod natijasi:

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