turi Mavjud foydalanuvchi = { id : raqam nomi : string }
// Serverga hali saqlanmagan yangi foydalanuvchi
turi Yangi foydalanuvchi = { ism : string }
Endi sizning kompaniyangizdagi stajyorga foydalanuvchini o'chirish uchun qandaydir kod yozish topshirig'i berilgan deylik. Ular buni shunday boshlaydilar:
funktsiyasi deleteUser ( foydalanuvchi : { identifikator : raqam , ism : string }) {
o'chirish foydalanuvchi . identifikatori }
ruxsat bering mavjud foydalanuvchi : mavjud foydalanuvchi = {
ID : 123456 , nomi : 'Ima User' } deleteUser ( existingUser ) deleteUser {id?: number, name: string} turidagi ob'ektni oladi va u {id: number, name: string} turidagi mavjud foydalanuvchidan o'tadi . E'tibor bering, id xususiyatining turi ( raqam ) kutilgan turning pastki turi ( raqam | aniqlanmagan ). Shuning uchun butun ob'ekt {id: number, name: string} ning pastki turi {id?: number, name: string} , shuning uchun TypeScript unga parvoz qilish imkonini beradi.
Bu yerda xavfsizlik muammosini ko'ryapsizmi? Bu nozik narsa: DeleteUser ga ExistingUser ni o'tkazgandan so'ng , TypeScript foydalanuvchi identifikatori o'chirilganligini bilmaydi , shuning uchun uni deleteUser(existingUser) bilan o'chirib tashlaganimizdan keyin existingUser.id ni o'qib chiqsak , TypeScript hali ham mavjudUser.id turini o'ylaydi. raqam !
Shubhasiz, biror narsa o'zining super turini kutgan joyda ob'ekt turidan foydalanish xavfli bo'lishi mumkin. Xo'sh, nima uchun TypeScript bunga ruxsat beradi? Umuman olganda, TypeScript mutlaqo xavfsiz bo'lishi uchun mo'ljallanmagan; Buning o'rniga, uning turi tizimi haqiqiy xatolarni qo'lga kiritish va ulardan foydalanish oson o'rtasida muvozanatni saqlashga harakat qiladi, nima uchun xato ekanligini tushunish uchun dasturlash tili nazariyasi bo'yicha ilmiy darajaga ega bo'lishingiz shart emas . Xavfsizlikning bu o'ziga xos holati amaliydir: buzg'unchi yangilanishlar (xususiyatni o'chirish kabi) amalda nisbatan kam uchraydi, TypeScript qulay emas va ob'ektni uning super turi kutilgan joyga belgilash imkonini beradi.
Qarama-qarshi yo'nalish haqida nima deyish mumkin - ob'ektni uning pastki turi kutilgan joyga belgilashingiz mumkinmi?
Keling, eski foydalanuvchi uchun yangi tur qo‘shamiz, keyin esa o‘sha turdagi foydalanuvchini o‘chirib tashlaymiz (tasavvur qiling, siz TypeScript-dan foydalanishni boshlashdan oldin hamkasbingiz yozgan kodga turlar qo‘shyapsiz):
Do'stlaringiz bilan baham: |