اختبار جاهزية الإنتاج
Production Readiness Quiz
اختبار جاهزية الإنتاج — Production Readiness Quiz
وصلت إلى نهاية مسار TypeScript. الفكرة الأساسية التي يجب أن تبقى معك: الأنواع تصميم. ليست زخرفة ولا مجرد إسكات compiler. النوع الجيد يصف المجال، يضيّق الاحتمالات، ويجعل التغيير أكثر أماناً. لكن البيانات الخارجية تحتاج تحقق runtime، والاختبارات ما زالت ضرورية للسلوك.
قبل اعتبار كود TypeScript جاهزاً، اسأل: هل strict مفعّل؟ هل any محصور؟ هل استجابات API تمثل الفشل؟ هل unions لها فحص شامل؟ هل public types مستقرة وواضحة؟ هل المنطق المهم قابل للاختبار؟ هذه الأسئلة تحول TypeScript من syntax إلى ممارسة هندسية.
مراجعة نهائية
هذا المثال يجمع unknown, validation, وResult. هذه هي عقلية production.
التحدي الأخير
أكمل الدالة بحيث ترجع ok فقط عندما تكون القيمة "ready".
مراجعة المفاهيم
التحدي الأخير اختبر التنفيذ. هذه الأسئلة تختبر عقلية production نفسها — القرارات التي تظهر في كل ملف تكتبه بعد اليوم. أجب قبل أن تنظر إلى الشرح.
any يطفئ الفحص: كل عملية عليه مسموحة والمترجم صامت حتى ينفجر السطر وقت التشغيل. أما unknown فيقلب المعادلة — لا تستطيع فعل شيء بالقيمة حتى تضيّق نوعها بفحص مثل typeof value !== "string"، تماماً كما فعلت readPort. عند حدود البيانات الخارجية، الإجبار على الفحص هو الميزة لا العبء.Result، الفشل جزء من توقيع الدالة: المستدعي لا يصل إلى result.value حتى يفحص result.ok — المترجم نفسه يمنعه، لأن الـ union المميز يضيّق بالفحص. أما throw فيجعل الفشل غير مرئي في التوقيع: من ينسى try/catch لا يعرف بخطئه حتى ينهار الإنتاج.Result ولا number، فقط JavaScript عارية. استجابة API أو ملف إعداد يصلان كبيانات لا يعرف المترجم عنها شيئاً وقت كتابة الكود. لهذا كانت readPort تفحص بـ typeof وNumber.isInteger فعلياً: الأنواع تحرس حدود الكود مع الكود، والفحص الفعلي يحرس حدود الكود مع العالم.استرجع الآن المفردات نفسها من ذاكرتك — هي أول ما تكتبه في أي مشروع إنتاجي جديد.
unknown هو نوع الحدود: يستقبل أي شيء لكنه يرفض أي استخدام قبل التضييق. اجعله نوع كل ما يعبر من الخارج — استجابات API، ملفات الإعداد، مدخلات المستخدم — ودع المترجم يطاردك حتى تفحص."strict": true في tsconfig.json يفعّل حزمة الفحوص الصارمة دفعة واحدة — noImplicitAny وstrictNullChecks وأخواتها. هو أول سطر يُضبط في مشروع جديد؛ تفعيله لاحقاً على كود قائم أضعاف كلفة البدء به.ماذا بعد؟
استخدم TypeScript في مشاريع حقيقية صغيرة: CLI، واجهة نموذج، أو API client. ابدأ بـstrict، اكتب types من المجال، وتجنب any إلا عند الحدود وبسبب واضح. عندما تشعر أن النوع صار معقداً جداً، لا تستسلم له؛ ارجع إلى التصميم. غالباً المشكلة ليست في TypeScript، بل في نموذج يحتاج اسماً أو فصلاً أو حالة أوضح.