0Pricing
TypeScript Academy · درس

فهم infer في الأنواع الشرطية

استخرجوا الأنواع الداخلية باستخدام infer في عبارات extends

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

ما المقصود بـ infer؟

تظهر الكلمة المفتاحية infer داخل الأنواع الشرطية، وتتيح لـ TypeScript التقاط متغير نوع من الموضع المطابق، بحيث يمكنكم استخدامه في الفرع الذي يتحقق فيه الشرط.

type GetReturn<T> = T extends (...args: any[]) => infer R ? R : never;

مثال أساسي على infer

نستخرج هنا نوع القيمة المعادة لأي دالة باستخدام infer R.

type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
type A = ReturnType<() => string>;  // string
type B = ReturnType<() => number[]>; // number[]

آلية عمل infer

يطابق TypeScript بنية T مع النمط. فإذا حدث تطابق، احتوى المتغير المستنتج على الجزء المطابق. وإذا لم يحدث، يُتخذ الفرع الآخر.

type First<T> = T extends [infer F, ...any[]] ? F : never;
type X = First<[string, number, boolean]>; // string

الاستدلال من المعلمات العامة

يمكنكم استنتاج وسيطة النوع لنوع عام، مثل استخراج T من Promise.

type Unwrap<T> = T extends Promise<infer U> ? U : T;
type A = Unwrap<Promise<string>>; // string
type B = Unwrap<number>;          // number

متغيرات infer متعددة

يمكنكم استخدام عدة عبارات infer في نوع شرطي واحد لالتقاط مواضع متعددة في الوقت نفسه.

type Head<T> = T extends [infer H, ...infer Tail] ? H : never;
type Tail<T> = T extends [infer H, ...infer Tail] ? Tail : never;

infer في معلمات الدوال

يمكن لـ infer التقاط أنواع معلمات الدوال أيضًا، وليس أنواع القيم المعادة فقط.

type FirstParam<T> = T extends (first: infer P, ...rest: any[]) => any ? P : never;
type A = FirstParam<(x: string, y: number) => void>; // string

السلوك التوزيعي مع infer

عندما يكون T نوع اتحاد، تتوزع الأنواع الشرطية، بما فيها الأنواع التي تستخدم infer، على كل عضو من أعضاء الاتحاد.

type UnwrapAll<T> = T extends Promise<infer U> ? U : T;
type X = UnwrapAll<Promise<string> | Promise<number>>;
// string | number

infer المتداخل

يمكنكم تداخل infer للوصول إلى مستويات أعمق في بنية النوع، مثل استخراج نوع قيمة مصفوفة داخل وعد.

type UnwrapPromiseArray<T> =
  T extends Promise<infer U>
    ? U extends (infer V)[]
      ? V
      : U
    : T;

infer مع أنماط السلاسل النصية

تتيح أنواع القوالب الحرفية، عند دمجها مع infer، استخراج سلاسل فرعية من الأنواع الحرفية للسلاسل النصية.

type GetDomain<T extends string> =
  T extends `https://${infer Domain}` ? Domain : never;
type D = GetDomain<"https://example.com">; // "example.com"

الأخطاء الشائعة

لا يعمل infer إلا داخل عبارة extends في نوع شرطي. ويؤدي استخدامه في موضع آخر إلى حدوث خطأ في الترجمة. كما أن infer الموجود في الفرع الآخر لا يكون متاحًا.

// Error: infer can only appear in extends clauses
type Bad<T> = infer R; // SyntaxError

مراجعة سريعة: infer

تتيح الكلمة المفتاحية infer لـ TypeScript التقاط جزء من النوع من خلال مطابقة بنيوية داخل نوع شرطي. وهي تدعم أنواع الأدوات مثل ReturnType وParameters وAwaited.

اختبار سريع

أين يمكن استخدام الكلمة المفتاحية infer؟

ما تعلّمتموه

تتيح الكلمة المفتاحية infer إجراء مطابقة للأنماط على مستوى الأنواع من خلال استخراج أجزاء الأنواع من الأنماط البنيوية. وهي أساس أنواع الأدوات القوية والبرمجة الوصفية الآمنة من حيث الأنواع في TypeScript.

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

هل درس «فهم infer في الأنواع الشرطية» مجاني؟

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

ماذا ستتعلم في «فهم infer في الأنواع الشرطية»؟

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

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

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

كم من الوقت يستغرق درس «فهم infer في الأنواع الشرطية»؟

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

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

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

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

  1. فهم infer في الأنواع الشرطية
  2. بناء ReturnType وParameters من الصفر
  3. أنماط الاستدلال المتداخلة بعمق
  4. حالات استخدام infer العملية: فك تغليف الوعود
← العودة إلى TypeScript Academy