العد باستخدام طول الصفيفة
مثّلوا الأرقام بأطوال الصفائف في الأنواع
العد باستخدام طول الصفيفة درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 4 دروس في المجموع.
الأعداد تحتاج إلى تمثيل
لا يستطيع نظام الأنواع جمع القيم العددية الحرفية مباشرةً. والحل التقليدي هو تمثيل العدد N على هيئة tuple يحتوي على N من العناصر. ولا تهم المحتويات؛ فالمهم هو الطول فقط.
type Three = [unknown, unknown, unknown];
type N = Three["length"]; // 3قراءة الطول
يحتوي كل نوع tuple على خاصية length، وهي نوع حرفي رقمي. تؤدي الفهرسة باستخدام ["length"] إلى قراءتها مجددًا كرقم يمكنك استخدامه.
type A = [1, 2, 3, 4]["length"]; // 4
type B = []["length"]; // 0
type C = ["x"]["length"]; // 1لماذا نستخدم unknown كنوع حشو
نستخدم unknown كنوع للعناصر لأن القيم غير مهمة، وإنما المهم هو العدد فقط. يمكن استخدام أي نوع، لكن unknown يوضح بجلاء أن العنصر «عنصر نائب».
type Two = [unknown, unknown];
type N = Two["length"]; // 2بناء tuple بطول N
للسير في الاتجاه المعاكس، ابنِ tuple بالطول المطلوب باستخدام الاستدعاء الذاتي. أضف عناصر حتى يتطابق الطول مع N، ثم أعد الـtuple. هذا هو المساعد الشهير BuildTuple.
type BuildTuple<N extends number, Acc extends unknown[] = []> =
Acc["length"] extends N ? Acc : BuildTuple<N, [...Acc, unknown]>;
type A = BuildTuple<3>; // [unknown, unknown, unknown]كيف تعمل حلقة BuildTuple
تتبّع BuildTuple<3>:
- طول Acc هو 0 وليس 3، فأضف عنصرًا
- طول Acc هو 1 وليس 3، فأضف عنصرًا
- طول Acc هو 2 وليس 3، فأضف عنصرًا
- طول Acc هو 3، وهو يساوي 3، فأعد النتيجة
طول المُجمّع هو عدّاد الحلقة.
type A = BuildTuple<2>; // [unknown, unknown]الطول هو الجسر
تتيح لك عمليتان الانتقال بين الأرقام وtuples:
- من رقم إلى tuple:
BuildTuple<N> - من tuple إلى رقم:
T["length"]
تعتمد كل الحسابات على مستوى الأنواع على عبور هذا الجسر.
type FromN = BuildTuple<4>; // tuple of length 4
type BackToN = FromN["length"]; // 4المقارنة باستخدام الطول
بما أن طول الـtuple قيمة حرفية، يمكنك التحقق من تساوي الأعداد. ابنِ tuples وقارن أطوالها من خلال قابلية الإسناد.
type SameLength<A extends unknown[], B extends unknown[]> =
A["length"] extends B["length"] ? true : false;
type X = SameLength<[1, 2], ["a", "b"]>; // true
type Y = SameLength<[1], ["a", "b"]>; // falseعداد طول عام
يمكنك إعادة تنفيذ length باستخدام الاستدعاء الذاتي لفهم آلية عمله، مع أن قراءة ["length"] أسرع. يوضح ذلك أن العد ليس سوى المرور على tuple.
type Len<T extends unknown[], Acc extends unknown[] = []> =
T extends [unknown, ...infer R]
? Len<R, [...Acc, unknown]>
: Acc["length"];
type A = Len<["a", "b", "c"]>; // 3استخدام tuples كعدادات
فكّر في الـtuple على أنه سجلّ عدّ: كل عنصر يمثل علامة واحدة. تؤدي إضافة عنصر إلى زيادة العداد، وإزالة عنصر إلى إنقاصه. يجعل هذا النموذج الذهني الحسابات بديهية.
type Inc<N extends number> = [...BuildTuple<N>, unknown]["length"];
type A = Inc<3>; // 4لمحة عن الإنقاص
يبني الإنقاص الـtuple للقيمة N، ثم يستنتج كل شيء باستثناء العنصر الأخير ويقرأ الطول الأقصر. ستضفي على ذلك صياغة رسمية في الدرس التالي.
type Dec<N extends number> =
BuildTuple<N> extends [unknown, ...infer R] ? R["length"] : 0;
type A = Dec<3>; // 2
type B = Dec<0>; // 0حدود يجب تذكّرها
تعمل هذه التقنية مع الأعداد الصحيحة الصغيرة غير السالبة. تؤدي قيم N الكبيرة جدًا إلى بلوغ حدود الاستدعاء الذاتي، ولا توجد أداة مضمّنة للتعامل مع الأعداد السالبة أو العشرية. وضمن هذه الحدود، تكون التقنية موثوقة وثابتة بالكامل.
type A = BuildTuple<5>["length"]; // 5 (fine)
// BuildTuple<10000> would error: too deepتحقق سريع
اختبر مدى فهمك للعد باستخدام طول الـtuple.
مراجعة
العد هو أساس الرياضيات على مستوى الأنواع.
- مثّل
Nباستخدام tuple طولهN. - اقرأ الرقم باستخدام
T["length"]. - ينتقل
BuildTuple<N>من الرقم إلى الـtuple. - يعمل مع الأعداد الصحيحة الصغيرة غير السالبة فقط.
التالي: الجمع والطرح الفعليان.
الأسئلة الشائعة
هل درس «العد باستخدام طول الصفيفة» مجاني؟
نعم — نص درس «العد باستخدام طول الصفيفة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 4 دروس في المجموع.
ماذا ستتعلم في «العد باستخدام طول الصفيفة»؟
مثّلوا الأرقام بأطوال الصفائف في الأنواع تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟
لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «العد باستخدام طول الصفيفة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟
نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- العد باستخدام طول الصفيفة
- الجمع والطرح على مستوى النوع
- المقارنات على مستوى النوع
- أدوات الأنواع الرقمية العملية