T extends U ? X : Y عمليًا
اكتب أنواعًا شرطية عملية، وتعلّم التوزيع على الاتحادات وكيفية تعطيله عند الحاجة.
T extends U ? X : Y عمليًا درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 1 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 3 دروس في المجموع.
مقدمة
الهدف: استخدام الأنواع الشرطية للتعبير عن المنطق في نظام الأنواع، وفهم متى تتوزع على الاتحادات.
- النمط:
T extends U ? X : Y - التوزيع: تطبيق الفرع على كل عضو في الاتحاد
النمط الأساسي
تختار الأنواع الشرطية فرعًا بناءً على قابلية إسناد T إلى string.
type IsString<T> = T extends string ? true : false
type A = IsString<string>
// ^ true
type B = IsString<number>
// ^ falseالتوزيع
عند استخدام T منفردًا، يُجرى الفحص لكل عضو في الاتحاد: تتحول string | number إلى string[] | number[].
type ToArray<T> = T extends any ? T[] : never
type C = ToArray<string | number>
// distributes:
// C is string[] | number[]إيقاف التوزيع
غلّف T داخل صفيف ([T]) لمنع التوزيع ومعاملة الاتحاد كوحدة واحدة.
type ToArrayNoDist<T> = [T] extends [any] ? T[] : never
type D = ToArrayNoDist<string | number>
// no distribution:
// D is (string | number)[]أداة عملية
مثال على النمط: بالنسبة إلى المصفوفات، تستخدم ElementType infer لاستخراج العنصر؛ وإلا فإنها تترك النوع كما هو.
type NonEmptyArray<T> = T[] extends [] ? never : T[]
// Usually better:
// type ElementType<T> = T extends ReadonlyArray<infer U> ? U : T
type E1 = ElementType<string[]>
// ^ string
type E2 = ElementType<readonly number[]>
// ^ number
type E3 = ElementType<string>
// ^ stringنصائح
نصائح: حافظ على بساطة الشروط؛ وانتبه إلى التوزيع؛ وأعد استخدام أنواع المساعدة؛ وأدرج ملفات اختبار للتركيبات المعقدة.
// Tips
// - Keep conditions simple; deep nesting harms readability
// - Document distribution behavior for teammates
// - Prefer helper aliases (ElementType, Awaited) for reuse
// - Watch for De Morgan like logic when composing unionsالتحقق من التوزيع
تحقق سريع: متى تتوزع الأنواع الشرطية؟
مراجعة
مراجعة: تصوغ الأنواع الشرطية المنطق داخل الأنواع. ويُطبَّق التوزيع على كل عضو في الاتحاد؛ استخدم التغليف داخل صفيف لإيقافه.
الأسئلة الشائعة
هل درس «T extends U ? X : Y عمليًا» مجاني؟
نعم — نص درس «T extends U ? X : Y عمليًا» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 3 دروس في المجموع.
ماذا ستتعلم في «T extends U ? X : Y عمليًا»؟
اكتب أنواعًا شرطية عملية، وتعلّم التوزيع على الاتحادات وكيفية تعطيله عند الحاجة. تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟
لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 3.
كم من الوقت يستغرق درس «T extends U ? X : Y عمليًا»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟
نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- T extends U ? X : Y عمليًا
- استخدام infer في أدوات شبيهة بـ ReturnType
- الأنواع المضمّنة: ReturnType و Parameters و InstanceType وغيرها