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 — وارتباط اسم المفتاح بنوع القيمة يعتمد كله عليه.