0Pricing
TypeScript Academy · درس

أنواع القيم الحرفية النصية والرقمية

قيّدوا القيم بسلاسل نصية وأرقام محددة باستخدام الأنواع الحرفية

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

ما النوع الحرفي؟

تصف معظم الأنواع مجموعة من القيم. فـ string يعني أي سلسلة نصية، وnumber يعني أي رقم. أما النوع الحرفي فيضيّق ذلك إلى قيمة واحدة محددة تمامًا.

لا يسمح النوع 'north' إلا بالسلسلة النصية 'north' — ولا شيء سواها. تتيح لك الأنواع الحرفية نمذجة مجموعات دقيقة ومحدودة من القيم المسموح بها مباشرةً في نظام الأنواع.

let dir: 'north' = 'north';
console.log(dir);
// dir = 'south'; // Error: not assignable to type 'north'

اتحادات السلاسل الحرفية

لا تكون القيمة الحرفية المفردة مفيدة جدًا بمفردها. ادمج عدة قيم باستخدام | لتكوين اتحاد من القيم الحرفية. وهذه هي الطريقة الاصطلاحية لنمذجة مجموعة ثابتة من الخيارات.

لا يمكن أن تكون قيمة Direction أدناه إلا واحدة من أربع سلاسل نصية محددة تمامًا.

type Direction = 'north' | 'south' | 'east' | 'west';

let heading: Direction = 'east';
console.log('Heading:', heading);

heading = 'west';
console.log('Now:', heading);

رفض القيم غير الصالحة

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

type Direction = 'north' | 'south' | 'east' | 'west';

let heading: Direction = 'north';
console.log(heading);
// heading = 'up'; // Error: '"up"' is not assignable to 'Direction'

القيم الحرفية كوسائط للدوال

استخدم اتحادات القيم الحرفية لوسائط الدوال التي لا تقبل إلا قيمًا محددة. يحصل المستدعي على الإكمال التلقائي ويُمنع من تمرير أي قيمة غير صالحة.

type Direction = 'north' | 'south' | 'east' | 'west';

function move(dir: Direction): string {
  return 'Moving ' + dir;
}

console.log(move('south'));
// console.log(move('left')); // Error

الأنواع الحرفية الرقمية

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

type Dice = 1 | 2 | 3 | 4 | 5 | 6;

function roll(): Dice {
  return (Math.floor(Math.random() * 6) + 1) as Dice;
}

console.log('Rolled:', roll());

القيم الحرفية الرقمية في الوسائط

تقيّد اتحادات القيم الحرفية الرقمية المدخلات بمجموعة محددة تمامًا من الأرقام — وهي مثالية لأمور مثل مستويات الجودة، أو الرموز الشبيهة برموز HTTP، أو أحجام الشبكات.

type Quality = 1 | 2 | 3;

function setQuality(level: Quality): void {
  console.log('Quality set to', level);
}

setQuality(2);
// setQuality(5); // Error: 5 is not 1 | 2 | 3

مزج القيم الحرفية النصية والرقمية

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

type Size = 'small' | 'large' | 0 | 100;

function resize(s: Size): void {
  console.log('Resizing to', s);
}

resize('small');
resize(100);

الأنواع الحرفية المنطقية

حتى القيم المنطقية لها أنواع حرفية: فـ true وfalse نوعان بالإضافة إلى كونهما قيمتين. والنوع boolean الكامل ليس في الحقيقة إلا true | false.

type AlwaysOn = true;

let enabled: AlwaysOn = true;
console.log('Enabled:', enabled);
// enabled = false; // Error: false not assignable to true

تحسّن القيم الحرفية التوثيق

يعمل اتحاد القيم الحرفية أيضًا بوصفه توثيقًا. فعند قراءة type Status = 'idle' | 'loading' | 'done'، يعرف أي شخص فورًا كل حالة ممكنة — من دون تخمين أو سلاسل نصية غامضة متناثرة في الشيفرة.

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

function render(s: Status): string {
  return 'State is: ' + s;
}

console.log(render('loading'));

دمج القيم الحرفية مع الأنواع الأخرى

يمكنك مزج الأنواع الحرفية مع الأنواع الأوسع في اتحاد. ومن الأنماط الشائعة 'auto' | number، أي إما الكلمة المفتاحية الخاصة 'auto' أو أي رقم.

type Width = 'auto' | number;

function setWidth(w: Width): void {
  console.log('Width:', w);
}

setWidth('auto');
setWidth(320);

القيم الحرفية كثوابت مُسمّاة

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

type Theme = 'light' | 'dark';

const DEFAULT_THEME: Theme = 'dark';

function applyTheme(t: Theme): void {
  console.log('Applying', t, 'theme');
}

applyTheme(DEFAULT_THEME);

تحقق سريع

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

مراجعة: الأنواع الحرفية

لقد تعلمت ما يلي:

  • تمثّل الأنواع الحرفية قيمة واحدة محددة تمامًا، مثل 'north' أو 6.
  • يؤدي دمج القيم الحرفية باستخدام | إلى إنشاء اتحاد محدود من القيم المسموح بها.
  • تعمل مع السلاسل النصية والأرقام والقيم المنطقية، ويمكن دمجها مع أنواع أوسع مثل 'auto' | number.
  • عند استخدامها كوسائط للدوال، توفر الإكمال التلقائي وترفض المدخلات غير الصالحة أثناء الترجمة.

بعد ذلك، سنستكشف كيفية اختيار TypeScript بين الأنواع الحرفية والأنواع الموسّعة.

type Direction = 'north' | 'south' | 'east' | 'west';
type Dice = 1 | 2 | 3 | 4 | 5 | 6;

function describe(d: Direction, n: Dice): string {
  return 'Go ' + d + ' ' + n + ' steps';
}

console.log(describe('north', 3));

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

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

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

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

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