Programming TypeScript
Download 1.81 Mb.
|
Boris Cherny Programming TypeScript Making Your JavaScript Applications (1)
sinf Hayvon {} sinfi Qush uzaytiradi Hayvon {
chirp() { } } sinf Qarg'a uzaytiradi Qush { caw() { }} Ushbu misolda Crow - Qushlarning kichik turi , bu Hayvonning kichik turi . Ya'ni, Qarg'a <: Qush <: Hayvon . bird ni qabul qiladigan va uni chiyillashiga olib keladigan funksiyani aniqlaymiz : funktsiyasi chirqillamoq ( qush : Bird ) : Qush { qush . chirp () qaytish qush } Hozirgacha juda yaxshi. TypeScript qanday narsalarni chirpga o'tkazishga imkon beradi ? chiyillash ( yangi Hayvon ) // Xato TS2345: “Hayvon” turidagi argument tayinlanmaydi chirqiroq ( yangi) Qush ) // "Qush" tipidagi parametrga. chiyillash ( yangi Qarg'a ) Bird misolini (chunki chirp parametri qushning turiga tegishli) yoki Crow misolini (chunki bu Qushning pastki turi ) o'tkazishingiz mumkin. Ajoyib: kichik turga o'tish kutilganidek ishlaydi. Keling, yangi funktsiya yarataylik. Bu safar uning parametri funksiya bo'ladi : funktsiyasi klon ( f : ( b : Qush ) => Qush ) : bekor { // ... } klonga Qushni olib , Qushni qaytaradigan f funksiya kerak . Qaysi turdagi funktsiyalarni f uchun xavfsiz tarzda o'tkazishingiz mumkin ? Shubhasiz, siz Qushni qabul qiladigan va Qushni qaytaradigan funksiyani topshirishingiz mumkin : funktsiyasi birdToBird ( b : Qush ) : Qush { // ... } klonlash ( birdToBird ) // OK Qushlarni olib, qarg'ani yoki hayvonni qaytaradigan funksiya haqida nima deyish mumkin ? funktsiyasi birdToCrow ( d : Bird ) : qarg'a { // ... } klonlash ( birdToCrow ) // OK funktsiyasi birdToAnimal ( d : Bird ) : Hayvon { // ... } clone ( birdToAnimal ) // Xato TS2345: '(d: Bird) => Hayvon turidagi argument // '(b: Bird) => Bird' tipidagi parametrga tayinlanmaydi. // "Hayvon" turi "Qush" turiga tayinlanmaydi. birdToCrow kutilganidek ishlaydi, lekin birdToAnimal bizga xato beradi. Nega? Tasavvur qiling-a, klonning amalga oshirilishi quyidagicha ko'rinadi: Download 1.81 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling