Տիպային պարամետրերի օգտագործումը TypeScript-ի ջեներիկների սահմանափակումներում

TypeScript-ը նաև հնարավորություն ունի մեկ տիպային պարամետրի հայտարարելու, որը կսահմանափակվի մեկ այլ տիպային պարամետրով: Սա անհրաժեշտ է, երբ պետք է պատճենել հատկությունները մի օբյեկտից մյուսը, միաժամանակ ապահովագրվելով, որ չենք փոխանցի ավելորդ հատկություն:

Դիտարկենք հետևյալ օրինակը: Կրկին վերադառնանք myFunc ֆունկցիային, որը սահմանում է փոփոխականի երկարությունը:

typescriptfunction myFunc <T> (data: T): T {
  console.log(data.length); // սխալ
  return data;
}

Սակայն այժմ մենք ուզում ենք, որ այս ֆունկցիան աշխատի միայն այն տիպերի հետ, որոնք ունեն length հատկություն: Դրա համար ստեղծենք ILength ինտերֆեյս, որին կնշանակենք length թվային տիպի հատկություն:

typescriptinterface ILength {
  length: number;
}

Այնուհետև մեր ֆունկցիայում սահմանենք ջեներիկ տիպ, որն ժառանգում է ILength-ից extends բանալի բառի միջոցով:

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

Ահա թե ինչպիսին է մեր ամբողջական կոդը:

typescriptinterface ILength {
  length: number;
}

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

Եկեք ստուգենք մեր ֆունկցիայի աշխատանքը և գտնենք տողի երկարությունը:

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

Կատարված կոդի արդյունքը:

typescript5
'abcde'

Իսկ այժմ պարամետրին փոխանցենք զանգված:

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

Կատարված կոդի արդյունքը:

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