keyof معامل keyof

آخر تحديث: 2026-10-22

keyof معامل keyof

يأخذ keyof T جميع أسماء المفاتيح في نوع الكائن T ويعطي اتحاد قيم حرفية: فـ keyof Settings هو "volume" | "theme". وهو حجر الأساس لـ«أمان أسماء المفاتيح نوعيًا» — فمع قيود الأنواع العامة، الخطأ في كتابة اسم مفتاح معامل الدالة يعطي خطأً فوريًا.

المجموعةالأنواع العامة
النوععامل
الوضع الصارمغير مطلوب

ℹ️ معلومة يحوّل المحرر لغة TypeScript إلى JavaScript ثم يشغّلها (بدون فحص أنواع)؛ راجع ناتج كل مثال لنتيجة فحص الأنواع.

📝 الصيغة

interface Settings {
  volume: number;
  theme: string;
}

type SettingKey = keyof Settings; // "volume" | "theme"

function read<T, K extends keyof T>(settings: T, key: K): T[K] {
  return settings[key];
}

⚙️ المعاملات

keyof Tاتحاد المفاتيح: اتحاد القيم الحرفية لجميع مفاتيح T (ويتحلل إلى string | number عند وجود توقيع فهرسة نصي)
K extends keyof Tالاقتران الكلاسيكي: تقييد معاملات أسماء المفاتيح ضمن نطاق المفاتيح الحقيقية
T[K]الوصول المفهرس: «نوع القيمة» المقابل لاسم المفتاح، فـ vol يكون number تلقائيًا

القيمة المُعادة:keyof معامل على مستوى النوع ولا ينتج كود تشغيل؛ وT[K] يربط نوع قيمة الإرجاع باسم المفتاح بدقة.

▶ مثال

عدّل الكود أدناه واضغط «جرّب» لرؤية نتيجة التحويل:

الناتج:

60 dark

(مخرجات التشغيل بعد التحويل؛ الخطأ في كتابة اسم المفتاح (مثل "volumn") يعطي خطأ ترجمة — K مقيّد بـ keyof T)

💡 نقاط مهمة

ℹ️ معلومة نتيجة keyof تتحدث تلقائيًا مع تغيّر شكل الكائن: أضف حقلاً إلى Settings فيزداد الاتحاد بندًا — وهذا تزامن لا يمكن تحقيقه أبدًا بكتابة "volume" | "theme" | "lang" يدويًا.
💡 تلميح keyof مع الأنواع العامة هو المادة الخام لأنواع الأدوات: فـ Pick<T, K extends keyof T> وتوقيع Omit المشابه يعتمدون عليه لضمان «اختيار المفاتيح الموجودة فعلًا فقط».
⚠️ تنبيه keyof المصفوفة يشمل الفهارس الرقمية وأسماء جميع طرق المصفوفة ("length" | "push" | ...)؛ ولأخذ نوع العنصر من المصفوفة استخدم T[number] لا keyof.
المزيد من الحالات قادم قريبًا.

📚 دروس ذات صلة

❓ أسئلة شائعة

س هل فرق بين keyof typeof obj و keyof Interface؟
ج typeof obj يحوّل «القيمة» إلى «نوع» أولًا ثم يأخذ المفاتيح (شائع مع كائنات ثابتة)؛ أما keyof Interface فيأخذ المفاتيح من النوع مباشرة. والنتيجة اتحاد قيم حرفية متكافئ.
س ماذا يعطي keyof على نوع ذي توقيع فهرسة؟
ج keyof لـ { [k: string]: boolean } هو string | number — فلم تعد أسماء المفاتيح تضيق إلى قيم حرفية وتختفي القدرة على منع الأخطاء الإملائية؛ فإذا احتجت أسماء مفاتيح دقيقة فتجنب توقيع الفهرسة الواسع.
س ما هو T[K]؟
ج نوع وصول مفهرس: استخدام نوع اسم المفتاح K للاستعلام عن نوع القيمة المقابل في T. فعندما K = "volume" يكون T[K] هو number — وارتباط اسم المفتاح بنوع القيمة يعتمد كله عليه.
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%