[key: string]: T توقيعات الفهرسة
آخر تحديث: 2026-10-22
[key: string]: T توقيعات الفهرسة
تصف توقيعات الفهرسة الكائنات التي تكون أسماء مفاتيحها غير ثابتة لكن نوع قيمها موحّد، مثل القواميس والعدادات وخرائط الإعدادات. وتُكتب [key: string]: T.
| المجموعة | تركيب الأنواع |
|---|---|
| النوع | بناء الجملة |
| الوضع الصارم | غير مطلوب |
ℹ️ معلومة يحوّل المحرر لغة TypeScript إلى JavaScript ثم يشغّلها (بدون فحص أنواع)؛ راجع ناتج كل مثال لنتيجة فحص الأنواع.
📝 الصيغة
const dict: { [key: string]: number } = {};
dict["a"] = 1;
// صيغة مكافئة عبر النوع المساعد
const same: Record<string, number> = {};
⚙️ المعاملات
| [key: string] | نوع المفتاح لا يكون إلا string أو number أو symbol أو اتحادًا منها؛ واسم key حر الاختيار |
|---|---|
| [i: number] | التعبير [i: number]: T يصف البنية المفهرسة بالأدلة؛ ويجب أن يكون نوع قيمة الفهرس الرقمي نوعًا جزئيًا من نوع قيمة الفهرس النصي |
القيمة المُعادة:لا قيمة مُعادة — توقيعات الفهرسة مفهوم خاص بطبقة الأنواع فقط ولا تُنتج أي كود في وقت التشغيل.
▶ مثال
عدّل الكود أدناه واضغط «جرّب» لرؤية نتيجة التحويل:
الناتج:
180 0
(مخرجات التشغيل بعد التحويل؛ نوع scores["Bob"] هو number دون خطأ في وضع strict — فتوقيعات الفهرسة تعلن أن "كل المفاتيح موجودة")
💡 نقاط مهمة
ℹ️ معلومة المعنى نفسه في Record<string, number> والتوقيع { [key: string]: number }، وصيغة نوع الأداة أكثر شيوعًا.
⚠️ تنبيه تجعل توقيعات الفهرسة "أي مفتاح" قانونيًا: فـ scores["Bob"] لا يخطئ حتى في وضع strict، فيفلت الخطأ الإملائي. وإذا كانت مجموعة المفاتيح محدودة فاستخدم Record<"a" | "b", T> أو الأنواع المخطَّطة.
💡 تلميح عند اختلف نوع القيم اكتبه اتحادًا: { [key: string]: string | number }، ثم ضيّق النوع بعد القراءة.
🏷️ تركيب الأنواع ذو صلة
💡 حالات ذات صلة
المزيد من الحالات قادم قريبًا.
📚 دروس ذات صلة
❓ أسئلة شائعة
س ما علاقة توقيع الفهرسة بـ Record<K, V>؟
ج تكافؤهما في القوة — Record هو توقيع فهرسة منفَّذ عبر الأنواع المخطَّطة. صيغة Record أكثر إيجازًا في الاستخدام اليومي، ويمكنها كذلك تحديد مجموعة المفاتيح بدقة إلى اتحاد حرفي.
س لماذا لا يخطئ الوصول إلى مفتاح غير موجود؟
ج لأن دلالة توقيع الفهرسة تقول: "كل مفاتيح string موجودة ونوعها T". ولأن المترجم يرصد الخطأ الإملائي، حدِّد المفاتيح بـ Record<"a" | "b", T> أو فعِّل noUncheckedIndexedAccess.
س هل يمكن تعايش الفهرس الرقمي والفهرس النصي؟
ج نعم، لكن يجب أن يكون نوع قيمة الفهرس الرقمي نوعًا جزئيًا من نوع قيمة الفهرس النصي (فمفاتيح الأعداد في JS تتحول في الحقيقة إلى مفاتيح نصية).