0Pricing
TypeScript Academy · درس

دمج القيم الحرفية في اتحادات

أنشئوا مجموعات محدودة من القيم بضم الأنواع الحرفية في اتحاد

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

اتحادات الأنواع الحرفية

يمثل اتحاد القيم الحرفية قيمة يجب أن تكون واحدة بالضبط من عدة خيارات معروفة. وهو أساس آلات الحالات والتعدادات وواجهات API محددة الأنواع جيدًا.

type Status = 'idle' | 'loading' | 'success' | 'error';

let state: Status = 'idle';
state = 'loading';
console.log('State:', state);

التبديل على اتحاد حرفي

تكون عبارة switch على اتحاد حرفي واضحة، ويعرف المترجم أن كل حالة تمثل إحدى القيم المسموح بها. ويتكامل ذلك تمامًا مع فحوصات الشمولية.

type Status = 'idle' | 'loading' | 'done';

function label(s: Status): string {
  switch (s) {
    case 'idle': return 'Waiting';
    case 'loading': return 'Working';
    case 'done': return 'Finished';
  }
}
console.log(label('loading'));

المعالجة الشاملة

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

type Dir = 'left' | 'right';

function step(d: Dir): number {
  if (d === 'left') return -1;
  return 1; // only 'right' remains
}
console.log(step('left'), step('right'));

حيلة الشمولية باستخدام never

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

type Shape = 'circle' | 'square';

function area(s: Shape): string {
  switch (s) {
    case 'circle': return 'pi r^2';
    case 'square': return 'a^2';
    default:
      const _exhaustive: never = s;
      return _exhaustive;
  }
}
console.log(area('circle'));

اشتقاق الاتحادات من كائنات const

من الأنماط الشائعة الاحتفاظ بالقيم في كائن const واشتقاق الاتحاد من قيمه باستخدام typeof obj[keyof typeof obj]. مصدر واحد للحقيقة ومخرجان.

const Colors = { Red: 'red', Blue: 'blue' } as const;
type Color = typeof Colors[keyof typeof Colors];
// 'red' | 'blue'
const c: Color = Colors.Blue;
console.log(c);

اشتقاق الاتحادات من المفاتيح

يمكنك أيضًا اشتقاق اتحاد من المفاتيح باستخدام keyof typeof obj. يفيد ذلك عندما تكون المفاتيح نفسها معرّفات ذات معنى.

const ICONS = { home: 0, search: 1, profile: 2 } as const;
type IconName = keyof typeof ICONS;
// 'home' | 'search' | 'profile'
const name: IconName = 'search';
console.log(name, ICONS[name]);

اتحادات مميَّزة بوسوم حرفية

أضف خاصية وسم حرفية إلى كل نوع من أنواع الكائن، وسيتمكن TypeScript من التمييز بينها. يؤدي فحص الوسم إلى تضييق النوع وصولًا إلى البنية الدقيقة.

type Action =
  | { type: 'add'; amount: number }
  | { type: 'reset' };

function reduce(a: Action): number {
  if (a.type === 'add') return a.amount;
  return 0;
}
console.log(reduce({ type: 'add', amount: 5 }));

التضييق باستخدام المميِّز

بمجرد اختبار المميِّز الحرفي، يعرف المترجم أي نوع من الأنواع لديك، ولذلك تصبح حقوله الفريدة متاحة بأمان من دون تحويلات للأنواع.

type Event =
  | { kind: 'click'; x: number; y: number }
  | { kind: 'key'; code: string };

function handle(e: Event): string {
  if (e.kind === 'key') return 'Key ' + e.code;
  return 'Click ' + e.x + ',' + e.y;
}
console.log(handle({ kind: 'key', code: 'Esc' }));

دمج اتحادات متعددة

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

type Primary = 'red' | 'blue' | 'yellow';
type Secondary = 'green' | 'orange';
type Color = Primary | Secondary;

const c: Color = 'green';
console.log(c);

الاتحادات كقيود للدوال

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

type Align = 'left' | 'center' | 'right';

function setAlign(a: Align): void {
  console.log('Aligned', a);
}
setAlign('center');
// setAlign('top'); // Error

لماذا تتفوق الاتحادات الحرفية على النصوص

يقبل استخدام وسيط من نوع string أي قيمة، بما في ذلك الأخطاء المطبعية. أما الاتحاد الحرفي فيكتشف الأخطاء أثناء الترجمة ويوثق الخيارات الصحيحة — وهو تحسين واضح للكود القابل للصيانة.

type Method = 'GET' | 'POST' | 'PUT' | 'DELETE';

function request(m: Method, url: string): void {
  console.log(m, url);
}
request('POST', '/api/users');

تحقق سريع

اختبر مدى فهمك للاتحادات الحرفية.

مراجعة: دمج القيم الحرفية

تعلمت أن:

  • تنشئ اتحادات من القيم الحرفية لتمثيل مجموعات خيارات محدودة.
  • تعالجها بشكل شامل، باستخدام حيلة never لتعزيز الأمان.
  • تشتق الاتحادات من كائنات const باستخدام keyof typeof وtypeof obj[keyof typeof obj].
  • تميّز بين الأنواع المختلفة باستخدام خصائص الوسوم الحرفية.

في الدورة التالية: الأنواع الخاصة unknown وnever وvoid.

const ROUTES = { home: '/', about: '/about' } as const;
type Route = typeof ROUTES[keyof typeof ROUTES];
const r: Route = '/about';
console.log(r);

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

هل درس «دمج القيم الحرفية في اتحادات» مجاني؟

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