0Pricing
TypeScript Academy · درس

أنماط الاستدلال المتداخلة بعمق

طبّقوا infer بشكل تكراري لاستخراج الأنواع المعقدة

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

لماذا نحتاج إلى الاستدلال العميق؟

أحيانًا يكون النوع الذي تريدونه مدفونًا داخل عدة طبقات من الأنواع العامة. ويستخدم الاستدلال العميق أنواعًا شرطية متكررة أو متسلسلة للوصول إليه.

type DeepUnwrap<T> =
  T extends Promise<infer U>
    ? DeepUnwrap<U>
    : T;

type A = DeepUnwrap<Promise<Promise<string>>>; // string

الأنواع الشرطية العودية

يدعم TypeScript 4.1 والإصدارات الأحدث الأنواع الشرطية العودية، مما يتيح إزالة طبقات الأغلفة واحدةً تلو الأخرى.

type Flatten<T> = T extends Array<infer U> ? Flatten<U> : T;
type B = Flatten<string[][][]>; // string

الاستدلال من الأنواع العامة المتداخلة

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

type InnerValue<T> =
  T extends Map<any, infer V>
    ? V extends Set<infer S>
      ? S
      : V
    : T;
type C = InnerValue<Map<string, Set<number>>>; // number

أنواع خصائص الكائنات العميقة

يمكن للأنواع العودية اجتياز بُنى الكائنات لاستخراج أنواع الخصائص المتداخلة بعمق.

type DeepGet<T, K extends keyof T> =
  T[K] extends object ? T[K] : never;

type Nested = { user: { profile: { name: string } } };
type Profile = DeepGet<Nested, "user">; // { profile: { name: string } }

استخراج أنواع عناصر المصفوفات بعمق

يتيح الجمع بين فك التغليف العودي والتعامل مع المصفوفات تغطية أي عمق من التداخل.

type ElementType<T> = T extends (infer U)[] ? ElementType<U> : T;
type D = ElementType<number[][][]>; // number

العودية الذيلية للـ tuple

تُعد معالجة tuple بالعودية الذيلية نمطًا شائعًا للأنابيب الآمنة من حيث الأنواع وأنواع تركيب الدوال.

type Last<T extends any[]> =
  T extends [...infer _, infer L] ? L : never;
type E = Last<[1, 2, 3]>; // 3

حدود العمق والاعتبارات العملية

يحد TypeScript من عمق العودية لمنع الحلقات اللانهائية. حافظوا على سطحية العودية، وفكروا في وضع حد أقصى باستخدام عدّاد للعمق عند الحاجة.

// Deep recursion may hit "Type instantiation is excessively deep"
// Simplify or use branded types to break deep chains

infer في توزيع أنواع الاتحاد

عندما يكون T نوع اتحاد، تتوزع الأنواع الشرطية؛ إذ تُطابق كل عضو على حدة، ثم تُدمج النتائج في اتحاد.

type Unwrap<T> = T extends Promise<infer U> ? U : T;
type F = Unwrap<Promise<string> | Promise<number> | boolean>;
// string | number | boolean

استنتاج tuples المتبقية

تتيح أنماط tuple المتبقية مع infer تفكيك الرأس والذيل ومعالجة الأنواع متغيرة العناصر.

type Init<T extends any[]> =
  T extends [...infer I, any] ? I : never;
type G = Init<[1, 2, 3, 4]>; // [1, 2, 3]

مثال واقعي: استجابة API متداخلة

يمكن فك تغليف نوع استجابة API المتداخلة للوصول إلى نوع بياناتها باستخدام infer المتسلسل.

type ApiResponse<T> = { data: T; status: number };
type UnwrapApi<T> = T extends ApiResponse<infer D> ? D : T;
type H = UnwrapApi<ApiResponse<{ users: string[] }>>; // { users: string[] }

مراجعة سريعة: الاستدلال العميق

يجمع الاستدلال العميق بين الأنواع الشرطية العودية ومتغيرات infer المتعددة ومطابقة الأنماط البنيوية لاستخراج الأنواع من بُنى عامة متداخلة بأي عمق.

اختبار سريع

ماذا يعيد Flatten إذا كان Flatten = T extends Array ? Flatten : T؟

ما تعلّمتموه

يستخدم الاستدلال العميق للأنواع المتداخلة الأنواع الشرطية العودية وأنماط infer المتسلسلة للوصول إلى الأنواع المدفونة داخل عدة أغلفة عامة. احرصوا على تقييد العودية لتجنب حدود العمق في TypeScript.

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

هل درس «أنماط الاستدلال المتداخلة بعمق» مجاني؟

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

ماذا ستتعلم في «أنماط الاستدلال المتداخلة بعمق»؟

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

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

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

كم من الوقت يستغرق درس «أنماط الاستدلال المتداخلة بعمق»؟

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

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

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

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

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