الدرس 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 أسماء العناصر الثلاثة في API فقط، وتبقى قيمة كل method حرفية، ويُمنع تغيير العناصر.

الفحوص

5 فحوص
  1. لا توجد أخطاء في الأنواع
  2. الدالة describe تعمل كما كانت
  3. الاسم غير الموجود يسبّب خطأ ترجمة
  4. الخاصية method تبقى بقيمتها الحرفية
  5. عناصر API للقراءة فقط
03

تلميحات

0/3
main.ts
المخرجاتTypeScript 5.9

نحمّل مترجم TypeScript الآن. يحدث هذا مرّة واحدة فقط، ثم يحفظه متصفّحك.

–/5

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

تجد 5 فحوص في بطاقة «المطلوب».