الدرس 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 مرفوض