الدرس 2 من 10
قيود الأنواع العامّة
- 12 دقيقة
- 5 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
اشترط ما تحتاجه فقط
الشرح
مُعامل النوع الذي لا قيد عليه يقبل أي نوع، ولهذا لا يسمح لك بفعل شيء تقريبًا، فداخل findById<T> تصير item.id خطأً في الأنواع، لأن T قد يكون رقمًا أو نصًّا ليس فيه id.
والقيد يحدّد ما تقبله الدالة، فالدالة function longest<T extends { length: number }>(a: T, b: T): T تقبل النصوص والمصفوفات وكل ما له length وترفض الأرقام، ويصير استعمال a.length داخلها مسموحًا.
والخطأ الشائع أن تترك النوع العامّ وتكتب items: { id: number }[]، فهذا يقبل الكتب لكن ناتجه يصير { id: number } فقط، فتصير book.title خطأً. أما القيد فيشترط وجود id ويحفظ معه بقية الحقول.
المطلوب
ضع قيدًا على T في findById يشترط أن يكون في كل عنصر id رقمي، مع بقاء الناتج T | undefined بكل حقوله.
الفحوص
5 فحوص- لا توجد أخطاء في الأنواع
- تجد العنصر بمعرّفه
- تُرجع undefined إن لم تجده
- الناتج يحتفظ بكل حقول العنصر
- العنصر الذي ليس فيه id مرفوض