الدرس 7 من 10
حرّاس الأنواع
- 14 دقيقة
- 5 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
من unknown إلى نوع موثوق
الشرح
ما يصلك من JSON.parse أو من الشبكة ليس له نوع معروف في الحقيقة، فنوعه الصحيح هو unknown، والمترجم لا يدعك تستعمله قبل أن تفحصه.
والفحص نفسه يضيّق النوع، فبعد typeof x === "object" && x !== null يصير x كائنًا، وبعد "id" in x يصير له حقل id، لكن نوع هذا الحقل يبقى unknown حتى تفحصه هو أيضًا بـtypeof.
لكن هذا التضييق ينتهي عند حدود الدالة، فالدالة التي تُرجع boolean لا تخبر من يستدعيها بشيء عن النوع. أما نوع الناتج x is User فينقله إلى الخارج، فيصير data من نوع User داخل if (isUser(data)). وهذه الدالة تُسمّى حارس النوع (type guard)، وهي وعد لا يتحقّق منه المترجم، فلو أرجعت true دائمًا لصدّقك.
المطلوب
اكتب isUser(x: unknown): x is User بحيث تتحقّق فعلًا من أن id رقم وأن email نصّ، وتُرجع false مع null ومع القيم البسيطة دون أن ترمي خطأً.
الفحوص
5 فحوص- لا توجد أخطاء في الأنواع
- تقبل مستخدمًا صحيحًا
- ترفض null والقيم البسيطة دون أن ترمي خطأً
- ترفض الكائن الناقص أو الذي نوع حقوله خاطئ
- داخل if (isUser(v)) يصير v من نوع User