الدرس 9 من 10

as const وsatisfies

هدف الدرس

تحقّق بلا توسيع

01

الشرح

كتابة النوع صراحةً — 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 لا يُطبَّق إلا على قيمة حرفية.

02

المطلوب

احذف النوع المكتوب بعد API، وأضف بعد الكائن as const satisfies Record<string, Endpoint>: فيصير EndpointName أسماء المداخل الثلاثة فقط، وتبقى كل method حرفية، وتُمنع الكتابة على المداخل.

معايير التصحيح

5 معايير
  1. لا أخطاء أنواع
  2. describe تعمل كما كانت
  3. الاسم المجهول خطأ ترجمة
  4. method تبقى حرفية
  5. المداخل للقراءة فقط
main.ts
المخرجاتTypeScript 5.9

جارٍ تحميل مترجم TypeScript… مرّة واحدة ثم يحفظه المتصفح.

–/5

يبدأ الفحص حين تجهز البيئة.

5 معايير في بطاقة «المطلوب».