funktsiyasi klon ( f : ( b : Qush ) => Qush ) : bekor {
ruxsat bering ota-ona = yangi Qush ruxsat bering chaqaloq qush = f ( ota-ona ) babyBird . chiyillash ()}
klon funksiyamizga Animalni qaytaradigan f ni o'tsak , unda .chirp ni chaqira olmaymiz ! Shunday qilib, TypeScript kompilyatsiya vaqtida biz topshirgan funktsiya hech bo'lmaganda Bird ni qaytarishiga ishonch hosil qilishi kerak .
Biz aytamizki, funktsiyalar o'zlarining qaytish turlari bo'yicha kovariantdir , bu funktsiya boshqa funktsiyaning pastki turi bo'lishi uchun uning qaytish turi < bo'lishi kerak, deb aytishning ajoyib usuli : boshqa funktsiyaning qaytish turi.
OK, parametr turlari haqida nima deyish mumkin?
funktsiyasi animalToBird ( a : Animal ) : Qush {
// ...
}
klonlash ( AnimalToBird ) // OK
funktsiyasi crowToBird ( c : Crow ) : Qush {
// ...
}
clone ( crowToBird ) // Xato TS2345: '(c: Crow) => Bird' turidagi argument emas // '(b: Bird) => Bird' tipidagi parametrga tayinlanishi mumkin.
Funktsiya boshqa funktsiyaga tayinlanishi uchun uning parametr turlari (shu jumladan, bu ) > bo'lishi kerak : boshqa funktsiyada ularga mos keladigan parametr turlari. Buning sababini bilish uchun foydalanuvchi crowToBird ni klonga o'tkazishdan oldin uni qanday amalga oshirganligi haqida o'ylab ko'ring . Agar ular buni qilsalar-chi?
funktsiyasi crowToBird ( c : Crow ) : Qush {
c . caw () qaytish yangi Qush
}
Agar klon yangi Qush bilan crowToBird deb nomlansa , biz istisnoga ega bo'lamiz, chunki .caw faqat Crow larda aniqlanadi , barcha Qushlarda emas .
Bu shuni anglatadiki, funktsiyalar o'zlarining parametrlari va turlari bo'yicha qarama -qarshidir . Ya'ni, funktsiya boshqa funktsiyaning kichik turi bo'lishi uchun uning har bir parametri va uning bu turi >: boshqa funksiyadagi mos parametri bo'lishi kerak .
Yaxshiyamki, bu qoidalarni yodlash va o'qish shart emas. Noto'g'ri kiritilgan funksiyani qayergadir o'tkazganingizda kod muharriri sizga qizil rangli chayqalishlarni berganida, ularni yodda tuting, shuning uchun TypeScript nima uchun bunday xatolikka yo'l qo'yganini bilasiz.
Do'stlaringiz bilan baham: |