الدرس 2 من 10

قيود الأنواع العامّة

هدف الدرس

اشترط ما تحتاجه فقط

01

الشرح

مُعامل النوع الذي لا قيد عليه يقبل أي نوع، ولهذا لا يسمح لك بفعل شيء تقريبًا، فداخل 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 ويحفظ معه بقية الحقول.

02

المطلوب

ضع قيدًا على T في findById يشترط أن يكون في كل عنصر id رقمي، مع بقاء الناتج T | undefined بكل حقوله.

الفحوص

5 فحوص
  1. لا توجد أخطاء في الأنواع
  2. تجد العنصر بمعرّفه
  3. تُرجع undefined إن لم تجده
  4. الناتج يحتفظ بكل حقول العنصر
  5. العنصر الذي ليس فيه id مرفوض
03

تلميحات

0/3
main.ts
المخرجاتTypeScript 5.9

نحمّل مترجم TypeScript الآن. يحدث هذا مرّة واحدة فقط، ثم يحفظه متصفّحك.

–/5

يبدأ الفحص حين تجهز البيئة.

تجد 5 فحوص في بطاقة «المطلوب».