0Pricing
TypeScript Academy · درس

التصريف الجمعي مع الأنواع

نمذجوا صيغ الجمع بطريقة آمنة نوعيًا

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

التصريف الآمن للأنواع حسب العدد

تحتاج اللغات إلى صيغ مختلفة للجمع: "عنصر واحد" مقابل "عنصران". ويمثّل i18n الآمن للأنواع فئات الجمع (مثل one / other)، ويفرض تمرير وسيطة count حتى لا تنسوا إضافتها.

فئات الجمع

تحدد قواعد الجمع في Intl فئات مثل zero وone وtwo وfew وmany وother. تستخدم الإنجليزية الفئتين one وother فقط، بينما تستخدم اللغات المحلية الأخرى فئات أكثر.

type PluralCategory = "zero" | "one" | "two" | "few" | "many" | "other";

بنية رسالة متعددة الصيغ

مثّلوا الرسالة متعددة الصيغ على شكل كائن مفاتيحه هي فئات الجمع. وتُعد other قيمة fallback الاحتياطية المطلوبة.

type PluralMessage = {
  other: string;
} & Partial<Record<Exclude<PluralCategory, "other">, string>>;

const items: PluralMessage = {
  one: "{count} item",
  other: "{count} items",
};

التمييز بين الرسائل متعددة الصيغ والعادية

يجمع الكتالوج بين السلاسل النصية العادية والكائنات متعددة الصيغ. وتختلف متطلبات الوسائط بينهما، لذلك نكتشف البنية على مستوى النوع.

type IsPlural<M> = M extends { other: string } ? true : false;

فرض count

عندما تكون الرسالة متعددة الصيغ، يجب أن تتضمن وسائط الترجمة قيمة عددية لـcount. ونحسب نوع الوسائط بشكل شرطي.

type PluralArgs<M> = IsPlural<M> extends true
  ? { count: number }
  : {};

type A = PluralArgs<typeof items>; // { count: number }

دالة t منمّطة للتعامل مع الجمع

ادمجوا البحث في الكتالوج مع الوسائط الشرطية، بحيث تطلب الرسائل متعددة الصيغ count ولا تطلبه الرسائل العادية.

declare const cat: {
  items: { one: string; other: string };
  hello: string;
};

declare function t<K extends keyof typeof cat>(
  key: K,
  args: PluralArgs<(typeof cat)[K]>
): string;

t("items", { count: 3 }); // ok
t("items", {});           // Error: count required
t("hello", {});           // ok

اختيار الصيغة وقت التشغيل

تختار Intl.PluralRules الفئة استنادًا إلى قيمة count وقت التشغيل، ثم تقرأ السلسلة النصية المطابقة (مع الرجوع إلى other).

function plural(msg: { other: string; [k: string]: string }, count: number, locale: string) {
  const cat = new Intl.PluralRules(locale).select(count);
  return (msg[cat] ?? msg.other);
}

الدمج مع الاستيفاء

تتضمن السلاسل متعددة الصيغ عادةً أيضًا {count}. ويمكن لنوع الوسائط أن يدمج متطلبات الجمع مع متغيرات الاستيفاء المستخرجة من الصيغة المختارة.

type FullArgs<M> = PluralArgs<M> & ExtractVars<M>;
// count plus any {placeholders} in the message

اللغات المحلية ذات الصيغ الأكثر تنوعًا

تستخدم بعض اللغات المحلية (مثل البولندية والروسية) الفئتين few وmany. وبما أن PluralCategory يتضمنهما أصلًا، يمكن للكتالوج توفير هذين المفتاحين، وستتعامل الآلية نفسها معهما.

const ruItems = {
  one: "{count} товар",
  few: "{count} товара",
  many: "{count} товаров",
  other: "{count} товара",
};

فرض fallback ‏other

بما أن other إلزامية في PluralMessage، يضمن نظام الأنواع وجود قيمة fallback احتياطية، ويمنع حالة وقت التشغيل التي لا تطابق فيها قيمة العدد أي صيغة جمع.

لماذا يهم هذا

تُعد أخطاء الجمع ("عنصر واحد items") ونسيان count شائعة في i18n غير المنمّط. إن تمثيل الفئات كأنواع وفرض count يجعلان التصريف الصحيح حسب العدد هو السلوك الافتراضي، ويحوّلان غياب count إلى خطأ في وقت الترجمة.

تحقّق سريع

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

مراجعة

مثّلتم الصيغ المتعددة على شكل كائنات مفاتيحها هي فئات الجمع مع fallback إلزامية هي other، واكتشفتم الرسائل متعددة الصيغ على مستوى النوع، وفرضتم وسيطة عددية هي count باستخدام الأنواع الشرطية. وتختار Intl.PluralRules الصيغة وقت التشغيل، كما تتوسع الآلية نفسها لتدعم اللغات المحلية ذات الصيغ الأكثر تنوعًا.

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

هل درس «التصريف الجمعي مع الأنواع» مجاني؟

نعم — نص درس «التصريف الجمعي مع الأنواع» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

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

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