الدرس 10 من 10

أنواع الوعود

هدف الدرس

لكل انتظار نوعه

01

الشرح

الدالة async تُرجع وعدًا (Promise) دائمًا، فناتج fetchUser(1) ليس مستخدمًا بل Promise<...>، ولهذا لا يمرّ نسيان await دون أن تنتبه، فـfetchUser(1).email خطأ عند الترجمة لأن الوعد ليس فيه بريد.

وحين لا تصدّر المكتبة نوع ناتج دوالها فاشتقّه أنت، فـReturnType<typeof fetchUser> يعطيك نوع الوعد، وAwaited تستخرج منه نوع ما بداخله.

وPromise.all تحفظ نوع كل عنصر بحسب مكانه، فالسطر const [user, orders] = await Promise.all([fetchUser(id), fetchOrders(id)]) يعطي كل متغيّر نوعه الصحيح. والاستدعاءان يجريان في الوقت نفسه، فلا تنتظر إلا بقدر الأبطأ منهما لا بقدر مجموعهما.

02

المطلوب

عرّف User بـAwaited<ReturnType<typeof fetchUser>>، ثم اكتب loadSummary(id: number): Promise<Summary> بحيث تجلب المستخدم وطلبات شرائه معًا بـPromise.all، وتُرجع { user, spent }، وspent فيه مجموع قيم total.

الفحوص

5 فحوص
  1. لا توجد أخطاء في الأنواع
  2. الملخّص صحيح
  3. الاستدعاءان يجريان في الوقت نفسه
  4. النوع User هو نوع ما بداخل الوعد
  5. النوع User لا يقبل كائنًا ناقصًا
03

تلميحات

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

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

–/5

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

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