0Pricing
TypeScript Academy · درس

التحقق من الشمولية باستخدام never

استخدموا never للتأكد من معالجة جميع حالات الاتحاد

التحقق من الشمولية باستخدام never درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 4 دروس في المجموع.

مرحبًا

يستخدم التحقق من اكتمال الحالات النوع `never` لضمان معالجة كل حالة من حالات الاتحاد. وعند إضافة عضو جديد إلى الاتحاد، سيحدد لكم TypeScript الموضع الذي يجب تحديثه بدقة.

مشكلة اكتمال الحالات

عند استخدام switch مع نوع اتحاد ونسيان إحدى الحالات، يتجاوز JavaScript الحالة بصمت. ويمكن لـ TypeScript اكتشاف ذلك باستخدام فحص never.
type Shape = 'circle' | 'square';
function area(s: Shape): number {
  if (s === 'circle') return 3.14;
  if (s === 'square') return 1;
  // What if we add 'triangle'?
}

نمط التحقق من اكتمال الحالات باستخدام never

أسند القيمة المتبقية إلى `never`. إذا استنتج TypeScript نوعًا غير `never`، فهذا يعني أن هناك حالة لم تتم معالجتها.
function assertNever(x: never): never {
  throw new Error('Unexpected value: ' + x);
}
function area(s: Shape): number {
  switch (s) {
    case 'circle': return 3.14;
    case 'square': return 1;
    default: return assertNever(s);
  }
}

إضافة عضو جديد إلى الاتحاد

إذا أضفت 'triangle' إلى اتحاد Shape، فسيُظهر TypeScript خطأ عند `assertNever(s)` ويطلب منك معالجة الحالة الجديدة.
type Shape = 'circle' | 'square' | 'triangle';
// Now TypeScript errors on assertNever(s) because s is 'triangle'
// — it's not never!

فحص never مضمن

يمكنك إجراء فحص مضمن لاكتمال الحالات دون استخدام دالة مساعدة.
function handle(shape: Shape): string {
  switch (shape.kind) {
    case 'circle': return 'circle';
    case 'square': return 'square';
    default:
      const _: never = shape; // Error if not exhaustive
      throw new Error('Unknown shape');
  }
}

التحقق من اكتمال الحالات دون switch

استخدم التقنية نفسها في سلاسل if/else.
function process(action: Action): void {
  if (action.type === 'A') { /* ... */ }
  else if (action.type === 'B') { /* ... */ }
  else {
    const _: never = action; // exhaustive
  }
}

never في قيود الأنواع العامة

يُعد never النوع الأدنى، وهو مفيد في الأنواع الشرطية لتمثيل الفروع المستحيلة.
type NonNullable<T> = T extends null | undefined ? never : T;
// Removes null and undefined from T

استخدام never للحالات المستحيلة

يُفيد never في نمذجة الحالات التي ينبغي أن تكون مستحيلة في نظام الأنواع لديك.
type State<T> =
  | { kind: 'loading' }
  | { kind: 'success'; data: T }
  | { kind: 'error'; msg: string };
// There should never be a state with kind: 'unknown'

never في الأنواع الشرطية

يُستخدم never في الأنواع الشرطية لتصفية أعضاء الأنواع غير المرغوب فيها.
type NonFunctions<T> = {
  [K in keyof T]: T[K] extends Function ? never : K
}[keyof T];
// Returns keys whose values are not functions

ينتشر never عبر أنواع الاتحاد

يُعد never عنصرًا محايدًا لأنواع الاتحاد — T | never = T.
type T = string | never; // string
type U = never | number | never; // number

الدالة المساعدة assertNever

ينبغي أن يتضمن كل مشروع TypeScript أداة assertNever بسيطة لإجراء فحوص اكتمال الحالات.
function assertNever(value: never, message?: string): never {
  throw new Error(message ?? `Unhandled: ${JSON.stringify(value)}`);
}

فحص سريع

ماذا يحدث عند السطر `default: assertNever(s)` إذا كان لا يزال لـ `s` نوع محتمل لم تتم معالجته؟

مراجعة

استخدم assertNever(x: never) في حالات default داخل switch للحصول على أخطاء أثناء الترجمة عند عدم معالجة أعضاء الاتحاد. يضمن ذلك بقاء الشيفرة صحيحة مع توسع الاتحاد بمرور الوقت.

الأسئلة الشائعة

هل درس «التحقق من الشمولية باستخدام never» مجاني؟

نعم — نص درس «التحقق من الشمولية باستخدام never» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 4 دروس في المجموع.

ماذا ستتعلم في «التحقق من الشمولية باستخدام never»؟

استخدموا never للتأكد من معالجة جميع حالات الاتحاد تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟

لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «التحقق من الشمولية باستخدام never»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟

نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تضييق النوع باستخدام typeof وقيم الصواب
  2. تضييق النوع باستخدام instanceof وin
  3. دوال حراسة الأنواع المعرّفة من المستخدم
  4. التحقق من الشمولية باستخدام never
← العودة إلى TypeScript Academy