الدرس 3 من 10

الوصول بالمفتاح مع keyof

هدف الدرس

مفتاح موجود وقيمة بنوعها الصحيح

01

الشرح

إذا كان عندك 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 هو الذي يحفظ أيّ مفتاح مرّرته بالتحديد.

02

المطلوب

أعد كتابة getProp دون any، بحيث ترفض أي مفتاح غير موجود في الكائن، ويكون نوع ناتجها هو نوع الحقل المطلوب.

الفحوص

5 فحوص
  1. لا توجد أخطاء في الأنواع
  2. تُرجع قيمة الحقل
  3. نوع الناتج هو نوع الحقل المطلوب بالضبط
  4. المفتاح غير الموجود يسبّب خطأ ترجمة
  5. الحقل الرقمي لا يُسنَد إلى متغيّر نصّي
03

تلميحات

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

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

–/5

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

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