الدرس 3 من 10
الوصول بالمفتاح مع keyof
- 13 دقيقة
- 5 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
مفتاح موجود وقيمة بنوعها الصحيح
الشرح
إذا كان عندك type User = { id: number; email: string } فإن keyof User هو اتحاد أسماء المفاتيح "id" | "email"، أما الوصول بالمفتاح (indexed access) فيعمل في الاتجاه المعاكس، فـUser["email"] هو string.
وحين تجمعهما في دالة عامّة مثل function getProp<T, K extends keyof T>(obj: T, key: K): T[K] يصير المفتاح غير الموجود خطأً عند الترجمة، ويأخذ الناتج نوع الحقل الذي طلبته بالضبط.
والخطأ الشائع أن تكتب key: keyof T وتجعل الناتج T[keyof T]، فهذا اتحاد أنواع كل القيم، فيصير نوع البريد string | number. والمُعامل الثاني K هو الذي يحفظ أيّ مفتاح مرّرته بالتحديد.
المطلوب
أعد كتابة getProp دون any، بحيث ترفض أي مفتاح غير موجود في الكائن، ويكون نوع ناتجها هو نوع الحقل المطلوب.
الفحوص
5 فحوص- لا توجد أخطاء في الأنواع
- تُرجع قيمة الحقل
- نوع الناتج هو نوع الحقل المطلوب بالضبط
- المفتاح غير الموجود يسبّب خطأ ترجمة
- الحقل الرقمي لا يُسنَد إلى متغيّر نصّي