الدرس 8 من 10
حلقة على المفاتيح
- 14 دقيقة
- 5 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
نوع يُبنى من مفاتيح نوع آخر
الشرح
ليست Partial وReadonly سحرًا مخفيًّا داخل المترجم، بل كل واحدة منهما سطر واحد تستطيع كتابته بنفسك. فـالنوع المُحوَّل (mapped type) يمرّ على مفاتيح نوع آخر ويبني لكل مفتاح خاصية، فمثلًا { [K in keyof T]: boolean } يعطي كل حقل في T قيمة منطقية.
وتستطيع أن تضيف إلى كل خاصية مُعدِّلات، فـ? تجعلها اختيارية، وreadonly تمنع تغييرها، و-? و-readonly تنزعانهما. ولست ملزمًا بأن تكون القيمة T[K]، بل تضع فيها أي نوع تريده.
والنوع المشتقّ يتبع أصله، فإذا أضفت phone إلى النموذج صار له مكان لرسالة خطأ تلقائيًّا. وانتبه إلى أن readonly فحص وقت الترجمة فقط، أما الكائن نفسه فيبقى قابلًا للتعديل أثناء التشغيل.
المطلوب
عرّف FormErrors<T> بحيث يكون لكل مفتاح في T رسالة نصّية اختيارية، وعرّف Frozen<T> بالخصائص نفسها وأنواعها، على أن تكون كلها للقراءة فقط.
الفحوص
5 فحوص- لا توجد أخطاء في الأنواع
- النوع FormErrors فيه رسالة نصّية اختيارية لكل حقل
- النوع FormErrors لا يقبل حقلًا ليس في النموذج
- النوع Frozen يحفظ نوع كل قيمة
- تغيير قيمة في Frozen يسبّب خطأ ترجمة