turi ElementType2 < T > = T kengaytiradi ( chiqarish U )[] ? U : T turi B = ElementType2 < raqam [] > // raqam
Ushbu oddiy misolda ElementType ElementType2 ga teng . Infer bandi yangi turdagi o'zgaruvchini qanday e'lon qilganiga e'tibor bering , U -TypeScript siz ElementType2 ga o'tkazgan T narsangiz asosida kontekstdan U turini chiqaradi .
Shuningdek, nima uchun biz U ni T bilan birga oldindan e'lon qilish o'rniga inline deb e'lon qilganimizga e'tibor bering . Agar biz buni oldindan e'lon qilganimizda nima bo'lar edi?
turi ElementUgly < T , U > = T uzaytiradi U [] ? U : T
turi C = ElementUgly < raqam [] > // TS2314 xatosi: "ElementUgly" umumiy turi // 2 turdagi argument(lar)ni talab qiladi.
Uh-oh. ElementUgly ikkita umumiy turni, T va U ni aniqlaganligi sababli , biz ElementUgly ni yaratishda ikkalasini ham kiritishimiz kerak . Lekin agar shunday qilsak, bu birinchi navbatda ElementUgly turiga ega bo'lish nuqtasini yo'qotadi ; u qo'ng'iroq qiluvchiga U hisoblash yukini yuklaydi , biz ElementUgly turini o'zi hisoblashini xohlaganimizda.
massiv elementlarining turini qidirish uchun kiritish operatori ( [] ) allaqachon mavjud. Yana murakkab misol haqida nima deyish mumkin?
turi SecondArg < F > = F kengaytiradi ( a : har qanday , b : xulosa B ) => har qanday ? B : hech qachon
// Array.slice turini oling F = turiof Massiv [ 'prototype' ][ 'slice' ] turi A = SecondArg < F > // raqam | aniqlanmagan
Demak, [].slice ning ikkinchi argumenti | sonidir aniqlanmagan . Va biz buni kompilyatsiya vaqtida bilamiz - buni Java-da bajarishga harakat qiling. O'rnatilgan shartli turlar
Shartli turlar sizga tur darajasida ba'zi kuchli operatsiyalarni ifodalash imkonini beradi. Shuning uchun TypeScript global miqyosda mavjud bo'lgan bir nechta shartli turlari bilan birga yuboriladi: Exclude
Oldingi bizning Without turimiz kabi, T da U da bo'lmagan turlarni hisoblaydi :
Do'stlaringiz bilan baham: |