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