الدرس 9 من 10
as const وsatisfies
- 13 دقيقة
- 5 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
تحقّق بلا توسيع
الشرح
كتابة النوع صراحةً — const API: Record<string, Endpoint> — تتحقّق من الشكل، لكنها تمحو ما عرفه المترجم: صارت المفاتيح أي string، فيمرّ describe("dropTable") بلا اعتراض ثم يسقط في التشغيل. وصار كل method مجرّد Method، لا "POST" بعينه.
as const يطلب أضيق نوع ممكن: كل نصّ يبقى حرفيًّا، وكل خاصية تصير readonly. وsatisfies يتحقّق من الشكل دون أن يغيّر النوع: الخطأ في أي مدخل يظهر عند تعريفه، والأسماء والقيم تبقى كما كُتبت. ثم keyof typeof API يأخذ نوع الكائن، ومنه مفاتيحه.
والترتيب مهمّ: { ... } as const satisfies Record<string, Endpoint>. العكس خطأ ترجمة، لأن as const لا يُطبَّق إلا على قيمة حرفية.
المطلوب
احذف النوع المكتوب بعد API، وأضف بعد الكائن as const satisfies Record<string, Endpoint>: فيصير EndpointName أسماء المداخل الثلاثة فقط، وتبقى كل method حرفية، وتُمنع الكتابة على المداخل.
معايير التصحيح
5 معايير- لا أخطاء أنواع
- describe تعمل كما كانت
- الاسم المجهول خطأ ترجمة
- method تبقى حرفية
- المداخل للقراءة فقط