Programming TypeScript
Download 1.81 Mb.
|
Boris Cherny Programming TypeScript Making Your JavaScript Applications (1)
ruxsat bering a : TreeNode = { qiymat : 'a' } ruxsat bering b : LeafNode = { qiymat : 'b' , isLeaf : true } ruxsat c : ichki tugun = { qiymat : 'c' , bolalar : [ b ]}
ruxsat bering a1 = mapNode ( a , _ => _ . toUpperCase ()) // TreeNode ruxsat b1 = mapNode ( b , _ => _ . toUpperCase ()) // LeafNode ruxsat c1 = mapNode ( c , _ => _ . toUpperCase ()) // InnerNode TreeNode ning pastki turini oladigan va xuddi shu pastki turini qaytaradigan mapNode funksiyasini qanday yozishingiz mumkinligini o'ylab ko'ring . LeafNode - ga o'tish LeafNode - ni , InnerNode-ni InnerNode-ni va TreeNode-ni TreeNode- ni qaytarishi kerak . Davom etishdan oldin buni qanday qilishni o'ylab ko'ring. Buni iloji bormi? Mana javob: funktsiyasi mapNode < T uzaytiradi TreeNode > ( tugun : T , f : ( qiymat : string ) => ip ) : T { qaytish {... tugun , qiymat : f ( tugun . qiymat ) } } mapNode - bu bitta umumiy turdagi parametr T ni belgilaydigan funksiya . T TreeNode ning yuqori chegarasiga ega . Ya'ni, T TreeNode yoki TreeNode ning pastki turi bo'lishi mumkin . mapNode ikkita parametrni oladi, ulardan birinchisi T tipidagi tugundir . Chunki biz aytganimizda tugun TreeNode ni kengaytiradi , agar biz TreeNode bo'lmagan biror narsani , aytaylik, bo'sh ob'ektni {} , null yoki TreeNode s massivini o'tkazsak , bu bir zumda qizil chiziq bo'ladi. tugun TreeNode yoki TreeNode pastki turi bo'lishi kerak . mapNode T tipidagi qiymatni qaytaradi . Esda tutingki, T TreeNode yoki TreeNode ning har qanday kichik turi bo'lishi mumkin . T ni shunday e'lon qilishimiz kerak edi ? T ni faqat T deb yozgan bo‘lsak (o‘chirib qo‘yish TreeNode ni kengaytiradi ), u holda mapNode kompilyatsiya vaqtida xatoga yo‘l qo‘ygan bo‘lardi, chunki siz T tipidagi cheklanmagan tugunda node.value ni xavfsiz o‘qiy olmaysiz (agar foydalanuvchi o‘tgan bo‘lsa-chi? raqammi?). T ni butunlay tark etganimizda va mapNode ni ( tugun : TreeNode, f: (qiymat: string) => string) => TreeNode bo'lsa, tugunni xaritalashdan keyin biz ma'lumotni yo'qotgan bo'lardik: a1 , b1 va c1 hammasi TreeNode s bo'ladi. T TreeNode ni kengaytiradi deb aytsak , biz kirish tugunining o'ziga xos turini ( TreeNode , LeafNode yoki InnerNode ) uni xaritalashdan keyin ham saqlab qolamiz. Bir nechta cheklovlar bilan chegaralangan polimorfizmOxirgi misolda biz T ga bitta turdagi cheklov qo'ydik : T kamida TreeNode bo'lishi kerak . Ammo bir nechta turdagi cheklovlarni xohlasangiz nima bo'ladi? Faqatgina ushbu cheklovlarning kesishishini ( & ) kengaytiring: 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