TypeScript / الأساسي / الدرس 3
الاتحادات والتضييق والقيم الغائبة
مثّل البدائل بصدق واستخدم ملاحظات التنفيذ لتبرير الوصول مع معالجة القيم الغائبة صراحة.
في هذه الصفحة
أهداف الدرس
- تضييق الاتحادات باستخدام typeof والمساواة والعلامات.
- معالجة null وundefined دون تأكيدات تتجاوز الفحص.
- استخدام never لكشف البدائل المغفلة.
يصف الاتحاد احتمالًا من عدة احتمالات
قد تكون string | number أي البديلين فلا تستخدم أولًا إلا المشترك. لا يدمج الاتحاد كل خصائص الأعضاء في كائن. يحتاج أسلوب النص دليلًا على أن القيمة نص. يستخدم تحليل التدفق الشروط والإسناد لتضييق النوع في الموقع، وقد تتغير المعرفة بالإسناد أو تعديل حالة مشتركة. قرّب الفحص من العملية ولا تضعف الاتحاد لإخفاء حالة ناقصة.
ملاحظة القيمة الأولية قبل استخدام أساليبها
تتفرع الدالة وفق typeof وتعيد النوع نفسه. تستدعي فرع النص toUpperCase والعدد toFixed، ويبقى فحص typeof فعليًا بعد محو الأنواع. تذكر أن typeof null هي "object" فتحتاج الكائنات unknown فحص null منفصلًا، وللمصفوفات فحص بنية خاص. لا يثبت فحص أولي حدًا عدديًا أو قاعدة مجال أخرى.
export {};
function describe(value: string | number): string {
if (typeof value === "string") { return value.toUpperCase(); }
return value.toFixed(1);
}
console.log(describe("code"));
console.log(describe(5));
CODE
5.0
يختار التفرع التنفيذي الباقي الأسلوب المناسب ويعيد الفرعان نصين.
الغياب مختلف عن قيمة فارغة صالحة
مع strictNullChecks يجب معالجة null وundefined إذا شمِلهما النوع. قد تغيب الخاصية الاختيارية وتعطي قراءتها undefined. يوقف التسلسل الاختياري الوصول عند غياب الأساس ولا يفحص حمولة اعتباطية. يوفر ?? بديلًا للغياب ويحفظ الصفر والخطأ والنص الفارغ. يغير التأكيد غير الفارغ الفحص فقط دون تحقق فعلي. فضّل حارسًا أو بديلًا أو فشلًا صريحًا.
ربط الحقول بالحالة التي تصح فيها
يستخدم الاتحاد الموسوم خاصية مشتركة بقيم حرفية مختلفة لتحديد البدائل. اربط العد بالجاهز والرسالة بالفشل بدل حقول اختيارية تسمح بتناقض. يبدل المثال وفق العلامة، وتكشف assertNever بديلًا جديدًا لأن النوع الباقي لا يقبل never. الرمي احتياط تنفيذي إذا خالف JavaScript غير المفحوص أو الإدخال العقد، وليس ضمان فحص للبيانات الواردة.
export {};
type State = { kind: "ready"; count: number } | { kind: "failed"; reason: string };
function assertNever(value: never): never { throw new Error("unexpected state"); }
function summary(state: State): string {
switch (state.kind) {
case "ready": return `ready:${state.count}`;
case "failed": return `error:${state.reason}`;
default: return assertNever(state);
}
}
console.log(summary({ kind: "ready", count: 3 }));
console.log(summary({ kind: "failed", reason: "disk" }));
ready:3
error:disk
تكشف كل علامة حقولها الموافقة ويفشل فحص never عند بديل جديد غير معالج.
يجب أن يبرر تنفيذ الحارس ادعاءه
يخبر حارس مخصص الفاحص بنوع القيمة عند true، ولا يثبت المترجم صحة كل تنفيذ. يخلق الحارس الدائم true ثقة كالتأكيد غير المبرر. افحص الحقول وقواعد المجال عند unknown ثم أعد بيانات مفحوصة أو فشلًا. تجنب حفظ التضييق عبر أسماء مشتركة قابلة للتعديل قد تغير العلامة. اختبر الكائن المشوه مع الصحيح؛ فالتضييق أداة تفكير لا ثقة تلقائية بالخارج.
الأخطاء الشائعة وإصلاحها
خاصية غير موجودة في اتحاد.
- لماذا يحدث؟
- تحتوي الخاصية بديل واحد فقط.
- كيف تصلحه؟
- ضيّق إلى البديل المناسب قبل الوصول.
- كيف تتجنب تكراره؟
- صمّم علامات مفيدة وعالج كل حالة.
تأكيد عدم الغياب يسمح بفشل تنفيذي.
- لماذا يحدث؟
- لم يضف التأكيد فحصًا فعليًا.
- كيف تصلحه؟
- احرس الغياب أو أعد فشلًا موثقًا.
- كيف تتجنب تكراره؟
- اختبر الغياب عند حد الإدخال.
حارس نوع يقبل كائنات مشوهة.
- لماذا يحدث؟
- لا يفحص تنفيذه البنية المدعاة.
- كيف تصلحه؟
- افحص الخصائص وشروط المجال.
- كيف تتجنب تكراره؟
- اختبر صحة الحارس بحالات مرفوضة.
اختبر فهمك
1. أضف paused دون عد أو سبب إلى State واشرح رفض الفاحص والإصلاح.
اعرض الحل المشروح
يبقى paused في الفرع الافتراضي فلا يقبل assertNever. أضف case "paused" بوصف موثق، ولا تحذف الفحص أو تؤكد اختفاء النوع؛ فغرضه فرض المراجعة عند التوسعة. أضف اختبارًا تنفيذيًا للفرع.
2. قارن value || 10 وvalue ?? 10 مع صفر وundefined واختر للعد الذي يصح صفره.
اعرض الحل المشروح
يعطي || عشرة للصفر ويحفظه ??، ويعطيان عشرة لـundefined. اختر ?? إذا كان الغياب وحده سبب البديل ثم افحص المجال منفصلًا. يحفظ ذلك الصفر دون ادعاء فحص الكسور واللانهاية والكائنات الخارجية.
أهم ما تعلمته
- ضيّق قبل أعضاء البديل الخاص.
- مثّل الغياب واحفظ الفراغ الصحيح.
- اختبر الحراس كشيفرة تنفيذ.