Avatar ·

خطأ TypeScript: "لا يمكن أن يكون نوع معامل فهرس التوقيع نوعًا اتحاديًا" — كيفية الإصلاح؟

مرحبًا أيها الزملاء! أنا مبتدئ في TypeScript وواجهت خطأ لا أستطيع فهمه. لدي كائن يخزن إعدادات لأنواع مختلفة من المستخدمين: 'admin' و 'user'. أريد إنشاء نوع يضمن أن مفاتيح الكائن ستكون فقط هذه السلاسل، والقيم ستكون منطقية. إليك الكود الخاص بي: ```typescript type UserRole = 'admin' | 'user'; interface Settings { [key: UserRole]: boolean; // خطأ! } ``` TypeScript يعطي: "لا يمكن أن يكون نوع معامل فهرس التوقيع نوعًا اتحاديًا. فكر في استخدام نوع كائن معرف (mapped object type) بدلاً من ذلك". كنت أعتقد أنه يمكن استخدام الأنواع الاتحادية كمفاتيح، لكن المترجم لا يوافق. أحتاج إلى أن يحتوي الكائن فقط على الخصائص 'admin' و 'user'، وعند محاولة الوصول إلى مفتاح آخر (مثل 'guest')، يجب أن يعطي TypeScript خطأ. كيف يمكنني فعل ذلك بشكل صحيح؟ لقد رأيت أن الوثائق تذكر الأنواع المعرفة (mapped types)، لكنني لا أفهم تمامًا كيفية تطبيقها في حالتي. سأكون ممتنًا لشرح واضح مع أمثلة.