0Pricing
TypeScript Academy · درس

الأنواع الشرطية التوزيعية

افهموا كيفية توزيع الشروط على أعضاء الاتحاد

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

مرحبًا

تطبّق الأنواع الشرطية التوزيعية نوعًا شرطيًا على كل عضو من أعضاء الاتحاد بشكل منفصل. ويتيح هذا السلوك القوي تحويل الاتحادات وتصفيتها.

ما التوزيع

عندما يحتوي النوع الشرطي على T عام مجرد وكان T اتحادًا، تطبّق TypeScript الشرط على كل عضو من أعضاء الاتحاد بشكل منفصل.
type Wrap<T> = T extends any ? { value: T } : never;
type R = Wrap<string | number>;
// = { value: string } | { value: number }

الشرط الأساسي

لا يحدث التوزيع إلا عندما يكون T معامل نوع عامًّا مجردًا (غير مُغلَّف). ويؤدي تغليف T داخل صفيف إلى منعه.
type Bare<T> = T extends string ? 'yes' : 'no';
type Wrapped<T> = [T] extends [string] ? 'yes' : 'no';
type B = Bare<'a' | 'b'>; // 'yes' | 'yes' = 'yes'
type W = Wrapped<'a' | 'b'>; // 'no' — treated as a tuple

تصفية الاتحادات باستخدام never

تؤدي إعادة never من الفرع الخاطئ إلى تصفية أعضاء الاتحاد.
type StringsOnly<T> = T extends string ? T : never;
type S = StringsOnly<string | number | boolean>; // string

الأداة المضمَّنة Extract

يُنفَّذ Extract باستخدام نوع شرطي توزيعي يُبقي الأعضاء القابلة للإسناد إلى U.
type Extract<T, U> = T extends U ? T : never;
type E = Extract<string | number | boolean, string | number>; // string | number

الأداة المضمَّنة Exclude

تزيل Exclude أعضاء الاتحاد القابلة للإسناد إلى U.
type Exclude<T, U> = T extends U ? never : T;
type Ex = Exclude<string | number | boolean, boolean>; // string | number

توزيع ToArray

طبّقوا ToArray على كل عضو من أعضاء الاتحاد بشكل منفصل عبر التوزيع.
type ToArray<T> = T extends any ? T[] : never;
type R = ToArray<string | number>; // string[] | number[]

حالة استخدام منع التوزيع

قد ترغبون أحيانًا في التعامل مع الاتحاد بأكمله كوسيط نوع واحد، بدلًا من توزيعه.
type IsUnion<T> = [T] extends [T] ? [T] extends [Exclude<T, T>] ? false : true : false;

الأنواع المُحوَّلة التوزيعية

اجمعوا بين الأنواع الشرطية التوزيعية والأنواع المُحوَّلة لتحويل خصائص محددة.
type PickByValue<T, V> = {
  [K in keyof T as T[K] extends V ? K : never]: T[K]
};

النوع الشرطي التوزيعي في ReturnType

يجعل السلوك التوزيعي ReturnType يعمل بشكل صحيح عندما يكون T اتحادًا من أنواع الدوال.
type Fn = (() => string) | (() => number);
type R = ReturnType<Fn>; // string | number

التوزيع الكسول مقابل الفوري

تؤجّل TypeScript الأنواع الشرطية التي تحتوي على معاملات أنواع حرة (أي لا تقيّمها) حتى تُحسم — ويُسمّى ذلك التقييم الكسول.

تحقّق سريع

ما قيمة `type R = (string | number) extends string ? 'yes' : 'no'` عندما لا يكون T نوعًا عامًا مجردًا؟

مراجعة

تطبّق الأنواع الشرطية التوزيعية الشرط على كل عضو من أعضاء الاتحاد بشكل منفصل عندما يكون T معامل نوع عامًّا مجردًا. ويشكّل ذلك أساس Extract وExclude وتصفية الاتحادات المخصصة. غلّفوا النوع داخل صفيف لمنع التوزيع.

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

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

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

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

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

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

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

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

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

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

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

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

  1. ‏keyof وأنواع الوصول المفهرس
  2. قيود الأنواع العامة: تضييق معاملات الأنواع
  3. الأنواع الشرطية: ‏T extends U ? X : Y
  4. الأنواع الشرطية التوزيعية
← العودة إلى TypeScript Academy