TypeScript-те женериктердің шектеулерінде тип параметрлерін қолдану
Сондай-ақ TypeScript-те бір тип параметрін басқа тип параметрімен шектеу мүмкіндігі бар. Бұл қажет, бір нысаннан басқа нысанға қасиеттерді көшірген кезде, сонымен қатар біз артық қасиет жіберіп жібермейтінімізге сенімді болу үшін.
Келесі мысалды қарастырайық. Тағы да
айнымалының ұзындығын анықтайтын myFunc
функциясына оралайық:
typescriptfunction myFunc <T> (data: T): T {
console.log(data.length); // қате
return data;
}
Алайда енді біз бұл функцияның тек length
қасиеті бар типтермен жұмыс істеуін қалаймыз.
Ол үшін ILength интерфейсін жасайық,
оған сандық типтегі length қасиетін берейік:
typescriptinterface ILength {
length: number;
}
Әрі біздің функциямызда extends кілт сөзі
арқылы ILength-тен мұраға беретін жалпыланған
типті берейік:
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' ]