المقارنات على مستوى النوع
قارنوا الأرقام بالكامل على مستوى النوع
المقارنات على مستوى النوع درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 4 دروس في المجموع.
مقارنة الأرقام
لمقارنة الأنواع الحرفية الرقمية، تعتمد مجددًا على tuples. الفكرة هي تقليص العددين بالتزامن ومعرفة أيهما يصل إلى الصفر أولًا. فالعدد الذي يصل إلى الـtuple الفارغ أولًا هو الأصغر.
type BuildTuple<N extends number, Acc extends unknown[] = []> =
Acc["length"] extends N ? Acc : BuildTuple<N, [...Acc, unknown]>;تساوي القيم الحرفية
يستخدم تساوي القيم الحرفية الرقمية قابلية الإسناد المتبادلة. تكون قيمتان حرفيتان متساويتين عندما يمتد كل منهما إلى الأخرى. ويؤدي تغليفهما داخل tuples إلى تجنب المفاجآت المتعلقة بالاتحادات.
type NumEquals<A extends number, B extends number> =
[A] extends [B] ? ([B] extends [A] ? true : false) : false;
type X = NumEquals<3, 3>; // true
type Y = NumEquals<3, 4>; // falseأكبر من عبر التقليص
من أجل A > B، ابنِ tuple لكل من العددين وأزل عنصرًا واحدًا من كل منهما في كل خطوة. إذا أصبح B فارغًا أولًا بينما لا يزال لدى A عناصر، فهذا يعني أن A أكبر.
type GreaterThan<A extends number, B extends number> =
BuildTuple<A> extends [...BuildTuple<B>, unknown, ...unknown[]]
? true : false;
type X = GreaterThan<5, 3>; // true
type Y = GreaterThan<3, 5>; // falseكيفية قراءة النمط
يعني النمط [...BuildTuple<B>, unknown, ...unknown[]] ما يلي: بادئة بطول B، ثم عنصر واحد إضافي على الأقل. إذا كان A يطابق ذلك، فهذا يعني أن لدى A عناصر أكثر من B، ومن ثم A > B.
type A = GreaterThan<4, 4>; // false (no extra element)
type B = GreaterThan<6, 2>; // trueأصغر من
إن LessThan ليس سوى GreaterThan مع عكس الوسيطين. أعد الاستخدام بدلًا من إعادة الاشتقاق.
type LessThan<A extends number, B extends number> =
GreaterThan<B, A>;
type X = LessThan<3, 5>; // true
type Y = LessThan<5, 3>; // falseأكبر من أو يساوي
اجمع بين المقارنة والتساوي. تكون A >= B صحيحة عندما يكون A > B أو A == B.
type Gte<A extends number, B extends number> =
GreaterThan<A, B> extends true
? true
: NumEquals<A, B>;
type X = Gte<5, 5>; // true
type Y = Gte<3, 5>; // falseالمقارنة التكرارية
تقارن طريقة بديلة بين العددين بإنقاصهما معًا حتى يصل أحدهما إلى الصفر. توضح هذه الطريقة فكرة العمل بالتزامن: من يصل إلى الصفر أولًا هو الأصغر.
type Cmp<A extends number, B extends number> =
A extends 0
? (B extends 0 ? "eq" : "lt")
: B extends 0
? "gt"
: Cmp<Dec<A>, Dec<B>>;
type X = Cmp<3, 5>; // "lt"اعتماد Dec
يحتاج الإصدار التكراري إلى Dec من الدرس السابق. تزيل كل خطوة علامة واحدة من كل جانب. عندما يكون كلا العددين صفرًا، فهما متساويان؛ وإذا كان أحدهما صفرًا فقط، فالآخر أكبر.
type Dec<N extends number> =
BuildTuple<N> extends [unknown, ...infer R] ? R["length"] : 0;التساوي مقابل قابلية الإسناد
انتبه: number extends number صحيحة، لكنها لا تمثل التساوي الحرفي. تفترض المقارنات هنا أنواعًا حرفية محددة مثل 3 و5، لا النوع العام number.
type A = NumEquals<3, 3>; // true
type B = 3 extends number ? 1 : 0; // 1 (assignability, not equality)بناء مفتاح للترتيب
باستخدام المقارنة، يمكنك ترميز قواعد الترتيب. على سبيل المثال، يمكنك تحديد ما إذا كان tuple مكوّن من رقمين مرتبًا تصاعديًا على مستوى الأنواع.
type IsSorted<A extends number, B extends number> =
GreaterThan<A, B> extends true ? false : true;
type X = IsSorted<2, 5>; // true
type Y = IsSorted<5, 2>; // falseاستخدمها باعتدال
تستهلك المقارنات موارد من الاستدعاء الذاتي. وهي ممتازة لحماية القيم الصغيرة المحدودة، مثل الفهارس والحدود الثابتة، لكنها ليست مكتبة أرقام عامة. أبقِ المعاملات صغيرة، وفضّل صيغة نمط البادئة لأنها أقل عمقًا من الاستدعاء الذاتي الكامل بالتزامن.
type A = GreaterThan<9, 4>; // true (cheap, prefix pattern)تحقق سريع
اختبر مدى فهمك للمقارنات على مستوى الأنواع.
مراجعة
يمكنك الآن ترتيب الأرقام في نظام الأنواع.
- التساوي من خلال قابلية الإسناد المتبادلة للقيم الحرفية.
GreaterThanمن خلال بادئة بطول B يتبعها عنصر إضافي.- يعكس
LessThanالوسيطين، ويضيفGteالتساوي. - يعمل ذلك مع الأرقام الحرفية الصغيرة، لا مع النوع العام
number.
التالي: تحويل كل ذلك إلى أدوات عملية.
الأسئلة الشائعة
هل درس «المقارنات على مستوى النوع» مجاني؟
نعم — نص درس «المقارنات على مستوى النوع» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 4 دروس في المجموع.
ماذا ستتعلم في «المقارنات على مستوى النوع»؟
قارنوا الأرقام بالكامل على مستوى النوع تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟
لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «المقارنات على مستوى النوع»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟
نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- العد باستخدام طول الصفيفة
- الجمع والطرح على مستوى النوع
- المقارنات على مستوى النوع
- أدوات الأنواع الرقمية العملية