[K in keyof T] أنواع المُعَيَّنة

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

[K in keyof T] أنواع المُعَيَّنة

أنواع المُعَيَّنة «تجتاز المفاتيح وتحوّل القيم»: [K in keyof T]: boolean تولّد لكل مفتاح K في T خاصية جديدة بالاسم نفسه. وهي خط الإنتاج لتغيير الأنواع بالجملة — فخيارية Partial وقراءة-فقط Readonly كلاهما نتيجة سطر مفاضلة واحد.

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

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

📝 الصيغة

type BooleanFlags<T> = {
  [K in keyof T]: boolean;
};

// تركيبات المعدِّلات: readonly يضيف عدم القابلية للتغيير، و -? يزيل الاختيارية
type MyReadonly<T> = { readonly [K in keyof T]: T[K] };
type Concrete<T> = { [K in keyof T]-?: T[K] };

⚙️ المعاملات

[K in keyof T]جملة التكرار: يرتبط K بكل مفتاح من مفاتيح T بالتسلسل
T[K]تحويل القيمة: نوع الخاصية الجديدة، ويمكن إجراء عمليات عليه (boolean أو T[K] | null أو أنواع تغليف...)
readonly / ? / -?المعدلات: يمكن إضافة أو إزالة readonly وعلامة الاختيارية ? أثناء المُعَيَّنة

القيمة المُعادة:يعيد نوع المُعَيَّنة نوع كائن جديدًا: مجموعة مفاتيحه مطابقة لـ T (أو مُصفّاة ومُعاد تسميتها عبر as)، وأنواع قيمه تتحول وفق قواعد المُعَيَّنة.

▶ مثال

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

الناتج:

{"dark":true,"beta":false,"newNav":true}
true false

(مخرجات التشغيل بعد التحويل؛ flags.dark تحصل على boolean وليس القيمة الحرفية الأصلية true — قاعدة المُعَيَّنة حولت كل حقل إلى boolean)

💡 نقاط مهمة

ℹ️ معلومة الأدوات المدمجة Partial وReadonly وPick وRecord كلها منفذة بأنواع المُعَيَّنة — فبفهم [K in keyof T] تفهم نصف فصل أنواع الأدوات.
💡 تلميح جملة as يمكنها إعادة تسمية المفاتيح أو تصفيتها: { [K in keyof T as NewKey<K>]: T[K] } تعيد التسمية بالقوالب الحرفية، و as never تحذف المفتاح مباشرةً — أسلوب متقدم لتغيير المفاتيح والقيم معًا.
⚠️ تنبيه المُعَيَّنة على keyof T متجانسة (تحفظ المعدلات الأصلية)، لكن المُعَيَّنة المباشرة على نوع الاتحاد (بأسلوب Record) لا تحفظ الاختيارية/قراءة-فقط — فإذا سألت «أين اختفت الـ ? الخاصة بي؟» فالإجابة غالبًا هذا الاختلاف.
المزيد من الحالات قادم قريبًا.

📚 دروس ذات صلة

❓ أسئلة شائعة

س ما الفرق بين نوع المُعَيَّنة وتوقيع الفهرسة؟
ج توقيع الفهرسة [k: string]: T يصرح بأن «أي مفتاح من نوع T» دون تثبيت أسماء المفاتيح؛ أما المُعَيَّنة [K in keyof T] فتنسخ المفاتيح المعروفة واحدًا تلو الآخر بدقة لكل مفتاح. الأول واسع وشامل والثاني تحويل دقيق.
س هل يمكن المُعَيَّنة على بعض المفاتيح فقط؟
ج نعم: بالتصفية عبر as ([K in keyof T as K extends "id" ? never : K]) أو بإجراء Pick/Omit أولًا ثم المُعَيَّنة. وتقص مجموعة المفاتيح يحدث في جملة as.
س هل يمكن لنوع المُعَيَّنة أن ينتج دوال أو مصفوفات؟
ج نعم: { [K in keyof T]: (v: T[K]) => void } يولّد مجموعة استدعاءات راجعة؛ و { [K in keyof T]: T[K][] } يجعل كل حقل مصفوفة — فالتحويل في موضع القيمة غير محصور بالأنواع البسيطة.
Web-Tutorial.com

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

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

100%