TypeScript Academy · درس

الجمع والطرح على مستوى النوع

ابنوا العمليات الحسابية من معالجة الصفائف

الدرس 2 من 413 خطوة

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

الحساب باستخدام الطول

باستخدام تمثيل طول الـtuple، يصبح الجمع ضمًا، ويصبح الطرح إزالة بادئة. تجري الحسابات على tuples، ثم تقرأ طول النتيجة.

type BuildTuple<N extends number, Acc extends unknown[] = []> =
  Acc["length"] extends N ? Acc : BuildTuple<N, [...Acc, unknown]>;

الجمع

لجمع A + B: ابنِ tuple بطول A، وابنِ آخر بطول B، ثم انشر محتوى كليهما داخل tuple جديد واقرأ طوله.

type Add<A extends number, B extends number> =
  [...BuildTuple<A>, ...BuildTuple<B>]["length"];

type S = Add<3, 4>; // 7

لماذا يؤدي الضم إلى الجمع

يؤدي وضع tuple طوله 3 متبوعًا بـtuple طوله 4 إلى tuple طوله 7. يؤدي جمع علامات سجلّي عدّ إلى سجلّ عدّ موحّد، ولذلك تتجمع الأطوال.

type A = Add<2, 2>; // 4
type B = Add<0, 5>; // 5
type C = Add<1, 6>; // 7

الطرح باستخدام البادئة

لحساب A - B: ابنِ tuple بطول A، ثم استنتجه على أنه بادئة بطول B متبوعة بباقٍ. طول rest هو A - B.

type Sub<A extends number, B extends number> =
  BuildTuple<A> extends [...BuildTuple<B>, ...infer Rest]
    ? Rest["length"]
    : never;

type D = Sub<7, 4>; // 3

الطرح خطوة بخطوة

في Sub<7, 4>: ابنِ tuple بطول 7، وطابق بادئة بطول 4، والتقط Rest بطول 3، ثم اقرأ طوله. البادئة التي أزلتها تمثل بالضبط B من العلامات.

type A = Sub<5, 2>; // 3
type B = Sub<4, 4>; // 0

يعيد never عند التجاوز السفلي

الأرقام على مستوى الأنواع هنا غير سالبة. إذا كانت B > A، فلن توجد بادئة صالحة، ويفشل النمط، وتكون النتيجة never. ويمكنك جعل القيمة الافتراضية 0 إذا كان ذلك أنسب لك.

type A = Sub<2, 5>; // never

type SubSafe<A extends number, B extends number> =
  [Sub<A, B>] extends [never] ? 0 : Sub<A, B>;
type B = SubSafe<2, 5>; // 0

الزيادة والإنقاص

الحالتان الخاصتان للجمع والطرح بمقدار واحد شائعتان بما يكفي لتسميتهما. يضيف Inc عنصرًا واحدًا، ويزيل Dec عنصرًا واحدًا.

type Inc<N extends number> = [...BuildTuple<N>, unknown]["length"];
type Dec<N extends number> =
  BuildTuple<N> extends [unknown, ...infer R] ? R["length"] : 0;

type A = Inc<4>; // 5
type B = Dec<4>; // 3

الضرب بالتكرار

الضرب هو جمع متكرر. أضف B إلى مُجمّع A مرات، وذلك بالعد التنازلي باستخدام Dec والتجميع باستخدام Add.

type Mul<A extends number, B extends number, Acc extends number = 0> =
  A extends 0 ? Acc : Mul<Dec<A>, B, Add<Acc, B>>;

type A = Mul<3, 4>; // 12

المساعد BuildTuple

تعتمد كل عملية هنا على BuildTuple. إنه البدائي القابل لإعادة الاستخدام الوحيد: أعطه رقمًا تحصل على tuple بذلك الطول. احتفظ به في مكان واحد وابنِ بقية العمليات فوقه.

type Five = BuildTuple<5>; // [unknown, unknown, unknown, unknown, unknown]
type N = Five["length"];   // 5

تركيب العمليات

بما أن كل عملية تستقبل رقمًا وتعيد رقمًا، يمكن تركيبها بحرية. يمكنك كتابة تعبيرات مثل Add<Mul<2, 3>, 4>، ويتولى المصرّف تقييمها.

type Result = Add<Mul<2, 3>, 4>; // 10

تنبيه عملي

هذه الحيل مفيدة جدًا للأعداد الصغيرة: فهارس المصفوفات، والأحجام الثابتة، والنطاقات المحدودة. أما للأعداد الكبيرة أو الحسابات العامة، فتجعل حدود الاستدعاء الذاتي وغياب الأعداد السالبة استخدامها غير عملي. استخدمها عندما تبقى القيم صغيرة وثابتة.

type A = Add<8, 7>;  // 15 (fine)
// Add<5000, 5000> would exceed recursion limits

تحقق سريع

اختبر مدى فهمك للحساب على مستوى الأنواع.

مراجعة

لقد نفّذت الحسابات في نظام الأنواع.

  • Add: ضمّ tuples ثم اقرأ الطول.
  • Sub: استنتج بادئة ثم اقرأ طول الباقي.
  • يمثل Inc/Dec الإصدارين ذوي الخطوة الواحدة.
  • يمثل BuildTuple البدائي المشترك.

التالي: مقارنة الأرقام على مستوى الأنواع.

البدء مجانًا

تعلم TypeScript مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
101
الدروس
352

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

هل درس «الجمع والطرح على مستوى النوع» مجاني؟

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

ماذا ستتعلم في «الجمع والطرح على مستوى النوع»؟

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

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

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

كم من الوقت يستغرق درس «الجمع والطرح على مستوى النوع»؟

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

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

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

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

  1. العد باستخدام طول الصفيفة
  2. الجمع والطرح على مستوى النوع
  3. المقارنات على مستوى النوع
  4. أدوات الأنواع الرقمية العملية
← العودة إلى TypeScript Academy