TypeScript / المتوسط / الدرس 11
خيارات الفحص الصارم وحدود الأخطاء
اختر الفحوص بوعي وافهم عدم اليقين الذي تكشفه وعالج القيم المرمية دون افتراض بنية Error للجميع.
في هذه الصفحة
أهداف الدرس
- تمييز عائلة strict من الخيارات الإضافية.
- شرح الكتابة الاختيارية الدقيقة والقراءة المفهرسة.
- تضييق unknown الملتقطة قبل فحصها.
strict عائلة سياسة لا كل فحص ممكن
تفعل strict عائلة مثل strictNullChecks وnoImplicitAny وstrictFunctionTypes وفق الإصدار، وقد تزداد صرامتها بالتحديث. يثبت المترجم المحلي التشخيص. يضيف المقرر noUncheckedIndexedAccess وexactOptionalPropertyTypes صراحة، وتضبط noEmitOnError التوليد لا نوع قيمة. لا تمنع noImplicitAny كل any الصريحة أو تثبت الثقة بالخارج. سجّل الإعداد الفعلي ولا تعتبر اسم الخيار برهان أمان.
قد يهم وجود الخاصية مستقلًا عن قيمتها
يسمح name?: string بالإغفال لا undefined الصريحة إلا بإضافتها عمدًا، وتبقى القراءة محتملة الغياب. يسمح المثال بالشكلين قصدًا ويرصدهما عبر Object.hasOwn. تتشابه القيمة وتختلف ملكية المفتاح، وهو مهم للتحديث والتسلسل والبدائل. لا يختار المترجم معنى المنتج. حدّد هل الإغفال بلا تغيير وما تمثيل المسح الصريح.
export {};
type Options = { label?: string | undefined };
const omitted: Options = {};
const explicit: Options = { label: undefined };
console.log(Object.hasOwn(omitted, "label"), Object.hasOwn(explicit, "label"));
false true
يحوي الثاني فقط مفتاح label خاصًا به ويسمح الاتحاد بـundefined صراحة.
معاملة عدم اليقين كمعلومة تُحل
يكشف فحص الفهرسة الغياب بدل افتراض النجاح. يكشف فحص تهيئة الخصائص بعض حقول الصنف غير المعطاة، ويظل تأكيد التهيئة وعدًا فقط. أصلح شرط التهيئة أو البحث لا التشخيص وحده. إذا هيأ إطار الحقل لاحقًا فوثّق دورة حياته واختبرها، ومثّل احتمال undefined حتى تحقق الخاصية. يجب اتفاق يقين الفاحص والجاهزية الفعلية عند الاعتماد.
تستطيع JavaScript رمي أي قيمة
تسمح JavaScript برمي النص والعدد والكائن وError. تعامل إعدادات المقرر قيمة catch كـunknown. يفحص المثال instanceof Error قبل message ويستخدم بديلًا. للفحص اعتبارات عوالم ونماذج أولية، وقد يحتاج بروتوكول خارجي فحص بنية بدل هوية منشئ. لا تحوّل كل ملتقط إلى Error لإسكات الوصول. اختر التسجيل أو النشر أو الاستعادة دون كشف أسرار.
export {};
function message(error: unknown): string {
return error instanceof Error ? error.message : "unexpected failure";
}
try { throw new Error("bad input"); } catch (error) { console.log(message(error)); }
try { throw "raw failure"; } catch (error) { console.log(message(error)); }
bad input
unexpected failure
تقدم Error رسالتها المعلومة ولا يُعامل النص ككائن Error فيأخذ البديل.
تطبيق الصرامة بأدلة
صنّف أخطاء الخيار الجديد بين عدم يقين ووصف خاطئ وتنفيذ فاسد. أصلح الأنماط من مصدرها بدل مئات التأكيدات، واختبر الناتج فقد يغير إصلاح النوع السلوك. ضيّق الاستثناء وفسّره وراجعه ولا تجعل any نوع الترحيل الافتراضي. وائم المحرر والبناء والاختبارات والتكامل. يفيد النجاح ضمن افتراضاته وتبقى الاعتماديات غير المكتوبة والبيانات الديناميكية والمخارج غير المضمونة محتاجة مراجعة.
الأخطاء الشائعة وإصلاحها
افتراض تفعيل الفهرسة المفحوصة عبر strict وحدها.
- لماذا يحدث؟
- لم تضبط الخيارات الإضافية صراحة.
- كيف تصلحه؟
- فعّل خيار الفهرسة المقصود وتحقق منه.
- كيف تتجنب تكراره؟
- افحص الإعداد الفعلي لكل مسار بناء.
معاملة نص ملتقط كـError.
- لماذا يحدث؟
- حل تأكيد محل التضييق الفعلي.
- كيف تصلحه؟
- افحص القيمة أو بروتوكول الخطأ المنظم.
- كيف تتجنب تكراره؟
- اختبر قيمًا مرمية غير Error.
تأكيد التهيئة يخفي حقلًا غير مهيأ.
- لماذا يحدث؟
- لا يوافق الوعد دورة الحياة.
- كيف تصلحه؟
- هيّئ الحقل أو مثّل عدم جاهزيته.
- كيف تتجنب تكراره؟
- اختبر الإنشاء والوصول المبكر.
اختبر فهمك
1. غيّر Options إلى label?: string دون undefined. أي كائن يفحص ولماذا تبقى القراءة محتملة الغياب؟
اعرض الحل المشروح
يبقى الكائن المغفل صحيحًا وتفشل undefined الصريحة مع الخيار. قد تعطي القراءة undefined لغياب الحقل، فتختلف الكتابة عن القراءة. أضف undefined عمدًا إذا عنت عملية حقيقية بدل تعطيل الفحص.
2. يتلقى مسجل خطأ null من وعد مرفوض. صف السلوك الآمن وما لا تضمنه المعلمة.
اعرض الحل المشروح
عامل القيمة unknown ولا تقرأ message قبل الفحص وسجل بديلًا مضبوطًا. يصف Promise النجاح ولا يفرض نوعًا لقناة الرفض العادية. لا تجبر معلمة Error كل مكتبة على رميها. اختبر null والرفض الأولي صراحة.
أهم ما تعلمته
- اختر الفحوص الإضافية وثبّت إصدارها.
- حل عدم اليقين بشروط فعلية.
- عامل المرمية unknown حتى يتوافر دليل.