Տիպային պարամետրերի օգտագործումը TypeScript-ի ջեներիկների սահմանափակումներում
TypeScript-ը նաև հնարավորություն ունի մեկ տիպային պարամետրի հայտարարելու, որը կսահմանափակվի մեկ այլ տիպային պարամետրով: Սա անհրաժեշտ է, երբ պետք է պատճենել հատկությունները մի օբյեկտից մյուսը, միաժամանակ ապահովագրվելով, որ չենք փոխանցի ավելորդ հատկություն:
Դիտարկենք հետևյալ օրինակը: Կրկին
վերադառնանք myFunc ֆունկցիային, որը
սահմանում է փոփոխականի երկարությունը:
function myFunc <T> (data: T): T {
console.log(data.length); // սխալ
return data;
}
Սակայն այժմ մենք ուզում ենք, որ այս ֆունկցիան
աշխատի միայն այն տիպերի հետ, որոնք ունեն
length հատկություն: Դրա համար ստեղծենք
ILength ինտերֆեյս, որին կնշանակենք
length թվային տիպի հատկություն:
interface ILength {
length: number;
}
Այնուհետև մեր ֆունկցիայում սահմանենք ջեներիկ
տիպ, որն ժառանգում է ILength-ից
extends բանալի բառի միջոցով:
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Ահա թե ինչպիսին է մեր ամբողջական կոդը:
interface ILength {
length: number;
}
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Եկեք ստուգենք մեր ֆունկցիայի աշխատանքը և գտնենք տողի երկարությունը:
console.log(myFunc('abcde'));
Կատարված կոդի արդյունքը:
5
'abcde'
Իսկ այժմ պարամետրին փոխանցենք զանգված:
console.log(myFunc(['a', 'b', 'c']));
Կատարված կոդի արդյունքը:
3
[ 'a', 'b', 'c' ]