عبارات switch الشاملة وفحوصات never
اكتب اتحادات شاملة باستخدام switch، واكتشف الحالات المفقودة باستخدام never، وأنشئ دالة مساعدة آمنة باسم assertNever.
عبارات switch الشاملة وفحوصات never درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 1 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 3 دروس في المجموع.
مقدمة
الهدف: إنشاء مفاتيح switch شاملة على الاتحادات، واستخدام never لاكتشاف الحالات المفقودة أثناء الترجمة.
مفتاح switch شامل
تستخدم الاتحادات المميِّزة حقلًا مشتركًا باسم kind. ويؤدي استخدام switch على هذا الحقل إلى تضييق كل حالة بأمان.
type Circle = { kind: "circle"; radius: number }
type Square = { kind: "square"; size: number }
type Shape = Circle | Square
function area(s: Shape): number {
switch (s.kind) {
case "circle":
return Math.PI * s.radius * s.radius
case "square":
return s.size * s.size
}
}عند نمو الاتحادات
عند إضافة عضو جديد (مثل triangle)، سنكتشفه باستخدام never حتى لا تؤدي الحالة المتروكة إلى حدوث خطأ بصمت.
type Triangle = { kind: "triangle"; base: number; height: number }
// If we extend Shape but forget to add case, we want a compile-time error
// type Shape = Circle | Square | TriangleassertNever
يجب أن تكون وسيطة assertNever من النوع never، حتى يؤدي وصول متغير جديد إلى الحالة الافتراضية إلى ظهور خطأ في الترجمة.
function assertNever(x: never): never {
throw new Error(`Unhandled case: ${String(x)}`)
}
function areaSafe(s: Shape): number {
switch (s.kind) {
case "circle":
return Math.PI * s.radius * s.radius
case "square":
return s.size * s.size
default:
return assertNever(s) // if Shape grows, compiler errors here
}
}اتحادات حرفية
ينطبق النمط نفسه على اتحادات السلاسل الحرفية: غطِّ كل قيمة ممكنة، واستدعِ assertNever في الحالة الافتراضية.
type Status = "idle" | "loading" | "success" | "error"
function toIcon(s: Status) {
switch (s) {
case "idle": return "⏸"
case "loading": return "⏳"
case "success": return "✅"
case "error": return "⚠️"
default: return assertNever(s)
}
}
// Alternative: const check
const _check: never = ((): Status => "idle")() as never // force compile-time check with careنصائح
نصائح: فعّل noFallthroughCasesInSwitch؛ وفضّل الاتحادات المميِّزة؛ واجعل default مخصصًا فقط لـ assertNever.
// Tips
// - Enable noFallthroughCasesInSwitch in tsconfig for safer switches
// - Prefer discriminated unions over boolean flags
// - Keep default branch only to call assertNever; avoid swallowing casesالتحقق من assertNever
تحقق سريع: ما الغرض من assertNever في مفتاح switch شامل؟
مراجعة
مراجعة: الاتحادات المميِّزة + مفتاح switch شامل = كود أكثر أمانًا. يكتشف never وassertNever الحالات التي لم تُعالج أثناء الترجمة.
الأسئلة الشائعة
هل درس «عبارات switch الشاملة وفحوصات never» مجاني؟
نعم — نص درس «عبارات switch الشاملة وفحوصات never» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 3 دروس في المجموع.
ماذا ستتعلم في «عبارات switch الشاملة وفحوصات never»؟
اكتب اتحادات شاملة باستخدام switch، واكتشف الحالات المفقودة باستخدام never، وأنشئ دالة مساعدة آمنة باسم assertNever. تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟
لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 3.
كم من الوقت يستغرق درس «عبارات switch الشاملة وفحوصات never»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟
نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- عبارات switch الشاملة وفحوصات never
- دوال التنبؤ والعامل satisfies
- تنقيح الاتحادات عبر حدود الدوال