0Pricing
TypeScript Academy · درس

استنتاج الأنواع المدرك للإعدادات المحلية

تأكدوا من مشاركة جميع الإعدادات المحلية لبنية المفاتيح نفسها

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

استنتاج الأنواع بحسب اللغة المحلية

يصدر التطبيق بعدة لغات محلية (en وtr وde...). ونريد نوعًا يصدر خطأً عند غياب أي مفتاح في لغة محلية وكان موجودًا في اللغة الأساسية، حتى لا تخرج الترجمات عن التزامن بصمت.

لغة محلية أساسية

اختاروا لغة محلية واحدة (عادةً en) لتكون بنية المفاتيح المعتمدة. ويجب أن تطابق كل لغة محلية أخرى بنيتها.

const en = {
  greeting: "Hello",
  cart: { empty: "Empty", checkout: "Checkout" },
} as const;

type Base = typeof en;

تقييد اللغات المحلية الأخرى

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

const tr: Base = {
  greeting: "Merhaba",
  cart: { empty: "Bo\u015f", checkout: "\u00d6deme" },
};
// Omitting cart.checkout -> Error: property missing

اكتشاف المفاتيح الإضافية أيضًا

يؤدي استخدام نوع اللغة الأساسية كتعليق نوع إلى الإبلاغ أيضًا عن المفاتيح غير المعروفة الموجودة في لغة محلية وغير الموجودة في اللغة الأساسية، مما يكشف الإدخالات المتبقية أو المكتوبة بطريقة خاطئة.

const de: Base = {
  greeting: "Hallo",
  cart: { empty: "Leer", checkout: "Kasse" },
  extra: "oops", // Error: not in Base
};

دالة مساعدة لتعريف اللغات المحلية

تفرض دالة مساعدة عامة البنية مع الحفاظ على قيمة كل عنصر، وتوفر موضعًا واضحًا لتعريف كل لغة محلية.

function defineLocale<T extends Base>(loc: T): T {
  return loc;
}

const fr = defineLocale({
  greeting: "Bonjour",
  cart: { empty: "Vide", checkout: "Paiement" },
});

سجل جميع اللغات المحلية

اجمعوا اللغات المحلية في سجل. ويضمن تقييد كل قيمة إلى Base توحّد البنية في التطبيق بأكمله.

const locales: Record<string, Base> = { en, tr, de: fr };
// every entry must have the full Base key structure

المساواة على مستوى النوع (بعمق كامل)

لضمانات أكثر صرامة، يمكنكم بناء نوع SameKeys يقارن بنيات المفاتيح بعمق، ويُرجع نوع خطأ عند اختلافها، متجاوزًا ما يكشفه التعليق النوعي العادي.

type SameKeys<A, B> =
  keyof A extends keyof B
    ? keyof B extends keyof A ? true : false
    : false;

اشتقاق المفاتيح مرة واحدة

بما أن جميع اللغات المحلية تشترك في Base، يُحسب نوع مسار المفتاح (من الدرس السابق) مرة واحدة من Base ويُعاد استخدامه لكل لغة محلية، ولذلك تكون كتابة نوع t مستقلة عن اللغة المحلية.

type Key = LeafPaths<Base>;
// same valid keys regardless of active locale

اختيار اللغة المحلية وقت التشغيل

وقت التشغيل، تستخدمون اللغة المحلية النشطة لفهرسة السجل؛ وقد ضمن نظام الأنواع مسبقًا امتلاك كل لغة محلية للمفاتيح نفسها، لذا تكون عمليات البحث آمنة.

function translate(locale: keyof typeof locales, key: Key): string {
  return getPath(locales[locale], key);
}

اكتشاف المفاتيح المفقودة بين اللغات المحلية

إذا تعذر تعليق النوع على كل ملف مباشرةً (مثلًا عند استيراد JSON)، يفحص تحقق نوعي وقت البناء كل لغة محلية مستوردة بمقارنتها مع Base، ويعرض نوع فرق يسرد المفاتيح المفقودة.

type Missing<L> = Exclude<keyof Base, keyof L>;
type TrMissing = Missing<typeof tr>; // never if complete

لماذا يهم هذا

ينحرف i18n غير المنمّط عن التوافق: يُضاف مفتاح إلى en ويُنسى في de، فيُشحن التطبيق بنص فارغ أو إنجليزي. ويحوّل تقييد كل لغة محلية إلى قاعدة أساسية مشتركة ذلك الإغفال إلى خطأ في وقت الترجمة، مما يحافظ على اكتمال جميع اللغات المحلية واتساقها.

تحقّق سريع

تأكدوا من فهمكم لاستنتاج الأنواع بحسب اللغة المحلية.

مراجعة

اخترتم لغة محلية أساسية لتكون البنية المعتمدة، وقيّدتم كل لغة محلية أخرى بها، لذلك يفشل تصريف الكود عند وجود مفاتيح مفقودة أو إضافية. وتحافظ دالة defineLocale المساعدة وسجل اللغات المحلية المقيّد على تطابق بنية جميع اللغات المحلية، كما تُشتق مسارات المفاتيح مرة واحدة من اللغة الأساسية.

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

هل درس «استنتاج الأنواع المدرك للإعدادات المحلية» مجاني؟

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

ماذا ستتعلم في «استنتاج الأنواع المدرك للإعدادات المحلية»؟

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

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

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

كم من الوقت يستغرق درس «استنتاج الأنواع المدرك للإعدادات المحلية»؟

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

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

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

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

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