Avatar ·

خطأ TypeScript: لا يمكن أن يكون نوع معامل الفهرس نوعًا اتحاديًا (union)

مرحبًا بالجميع! أنا مبتدئ في TypeScript وقد واجهت خطأ غير مفهوم. أحاول إنشاء كائن حيث يمكن أن تكون المفاتيح من نوعين فقط من السلاسل النصية: `'user'` أو `'admin'`. كتبت الكود التالي: ```typescript type Role = 'user' | 'admin'; interface UserData { name: string; age: number; } // أحاول إنشاء كائن حيث المفتاح هو الدور، والقيمة هي بيانات المستخدم const users: { [key: Role]: UserData } = {}; ``` لكن TypeScript يعطي خطأ: *"An index signature parameter type cannot be a union type. Consider using a mapped object type instead"*. أفهم أن توقيعات الفهرس (index signatures) تعمل عادةً مع `string` أو `number` أو `symbol`، لكن لماذا لا يمكن استخدام اتحاد السلاسل النصية الحرفية؟ فهي أيضًا سلاسل نصية! أحتاج إلى أن يضمن كائن `users` احتواءه فقط على المفاتيح `'user'` و `'admin'`، وعند محاولة الوصول إلى `users['guest']` يجب أن يعطي TypeScript خطأ في مرحلة التجميع. كيف يمكنني فعل ذلك بشكل صحيح؟ هل هناك صيغة أخرى لمثل هذه الحالات؟