Generiklar qachon bog'lanadi?
Umumiy turni e'lon qilgan joy nafaqat turni qamrab oladi, balki TypeScript qachon aniq turni umumiy turingizga bog'lashini ham belgilaydi. Oxirgi misoldan:
turi Filtr = {
< T > ( massiv : T [], f : ( element : T ) => mantiqiy ) : T []
}
ruxsat bering filtr : filtr = ( massiv , f ) => // ...
ni qo'ng'iroq imzosining bir qismi sifatida e'lon qilganimiz uchun (imzoning ochilish qavs oldidan () ) , biz Filter tipidagi funksiyani aslida chaqirganimizda TypeScript aniq turni T ga bog'laydi .
Agar biz T ni Filter taxallus turiga qo'ygan bo'lsak, TypeScript Filter dan foydalanganda bizdan turni aniq bog'lashni talab qilgan bo'lar edi :
turi < T > filtri = {
( massiv : T [], f : ( element : T ) => mantiqiy ) : T []
}
ruxsat bering filtr : filtr = ( massiv , f ) => // Xato TS2314: Umumiy turdagi "Filtr" // ... // 1 turdagi argument(lar)ni talab qiladi.
turi Boshqa Filtr = Filtr // Xato TS2314: Umumiy turdagi "Filtr" // 1 turdagi argument(lar)ni talab qiladi.
ruxsat bering filtr : Filtr < raqam > = ( massiv , f ) => // ...
turi StringFilter = Filtrni < string > let stringFilter : StringFilter = ( massiv , f ) => // ...
Umuman, TypeScript umumiy turlardan foydalanganda aniq turlarni umumiy bilan bog‘laydi: funksiyalar uchun, siz ularni chaqirganingizda; sinflar uchun, bu siz ularni yaratganingizda (bu haqda batafsilroq 100-betdagi “Polimorfizm” da ); va turdagi taxalluslar va interfeyslar uchun ( 91-betdagi “Interfeyslar” ga qarang ), aynan siz ulardan foydalanayotganingizda yoki amalga oshirganingizda. Jeneriklarni qayerda e'lon qilish mumkin?
TypeScript-ning qo'ng'iroq imzosini e'lon qilish usullarining har biri uchun unga umumiy turni qo'shish usuli mavjud:
turi Filtr = {
< T > ( massiv : T [], f : ( element : T ) => mantiqiy ) : T []
} ruxsat bering filtr : filtr = // ...
Do'stlaringiz bilan baham: |