Avatar ·

Как получить ключи интерфейса TypeScript в виде массива строк?

الجميع مرحباً! بدأت دراسة TypeScript وواجهت مشكلة لا أستطيع حلها. لدي واجهة تصف بنية كائن، وأحتاج إلى الحصول على قائمة مفاتيحه كمصفوفة من السلاسل النصية لاستخدامها لاحقاً في الكود (مثلاً للتحقق من الصحة أو إنشاء النماذج). هذا مثال على الواجهة الخاصة بي: ```typescript interface User { name: string; age: number; email: string; } ``` أريد الحصول على مصفوفة `['name', 'age', 'email']` تلقائياً بناءً على هذه الواجهة. جربت استخدام `Object.keys()`، لكن TypeScript اعترض لأنني أمرره نوع بيانات وليس كائناً. جربت خيارات مختلفة مع `keyof`، لكنني أحصل فقط على اتحاد سلاسل نصية وليس مصفوفة. أرشدوني كيف أفعل ذلك بشكل صحيح؟ أحتاج إلى حل يعمل مع TypeScript مع الحفاظ على الأنواع. سأكون ممتناً جداً لأمثلة الكود! <<>>

المشكلة: مفاتيح الواجهة غير متاحة في زمن التشغيل

التحدي الرئيسي هو أن واجهات TypeScript موجودة فقط في مرحلة الترجمة ولا يمكن الوصول إليها أثناء تنفيذ الكود. لذلك من المستحيل الحصول على مصفوفة المفاتيح مباشرة من الواجهة. لكن هناك حلول بديلة: يمكن تعريف ثابت بمصفوفة المفاتيح واستنتاج النوع منه، أو استخدام الديكورات والانعكاس. إليك مثال مع الثابت: ```typescript const userKeys = ['name', 'age', 'email'] as const; type User = { [K in typeof userKeys[number]]: string; }; // userKeys الآن مصفوفة سلاسل نصية ``` يحافظ هذا على الأنواع ويعطي مصفوفة لزمن التشغيل.