0Pricing
TypeScript Academy · درس

القيم المنطقية الحرفية واستنتاج النوع

افهموا كيف يوسّع TypeScript استنتاج النوع الحرفي أو يضيّقه

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

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

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

let yes: true = true;
let no: false = false;
console.log(yes, no);
// yes = false; // Error: false not assignable to true

القيم الحرفية المنطقية في الاتحادات

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

type Result =
  | { ok: true; value: number }
  | { ok: false; error: string };

const r: Result = { ok: true, value: 42 };
console.log(r);

توسيع النوع

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

const exact = 'hello'; // type: 'hello' (literal)
let broad = 'hello';   // type: string (widened)
console.log(exact, broad);

توسّع let إلى النوع العام

لأن متغير let يمكن إعادة إسناده، يستنتج TypeScript النوع العام للسماح بالإسنادات المستقبلية. تبدأ سلسلة نصية معرّفة بـ let بالنوع string، لا بالنوع الحرفي.

let mood = 'happy'; // inferred as string
mood = 'sad';       // allowed
mood = 'tired';     // allowed
console.log(mood);

يحافظ const على القيمة الحرفية

لا يمكن إعادة إسناد const مطلقًا، لذلك يستنتج TypeScript النوع الأكثر تحديدًا — النوع الحرفي. ولهذا يكون نوع const greeting = 'hi' هو 'hi'، لا string.

const greeting = 'hi'; // type: 'hi'

type Greeting = typeof greeting; // 'hi'
const other: Greeting = 'hi';
console.log(other);

توسيع الأرقام والقيم المنطقية

تنطبق القاعدة نفسها على الأرقام والقيم المنطقية. يحتفظ const بالقيمة 42 أو true بوصفها قيمة حرفية، بينما يوسّعها let إلى number أو boolean.

const n = 42;   // type: 42
const b = true; // type: true
let m = 42;     // type: number
let c = true;   // type: boolean
console.log(n, b, m, c);

سبب وجود توسيع النوع

يجعل توسيع النوع الشيفرة اليومية أسهل في الاستخدام. فلو كان كل let count = 0 مقيّدًا بالنوع الحرفي 0، لما تمكنت من زيادته. يتيح التوسيع للمتغيرات القابلة لإعادة الإسناد أن تعمل بصورة طبيعية.

let count = 0; // widened to number
count = count + 1;
count = 10;
console.log('Count:', count);

فرض قيمة حرفية باستخدام تعليق توضيحي

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

let status: 'on' | 'off' = 'on';
status = 'off'; // allowed
console.log(status);
// status = 'paused'; // Error

توسيع النوع في خصائص الكائنات

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

const config = { mode: 'dark' };
// config.mode has type string, not 'dark'
config.mode = 'light';
console.log(config.mode);

استنتاج القيم الحرفية مع الدوال

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

function getMode(): 'dark' | 'light' {
  return 'dark';
}

const m = getMode(); // type: 'dark' | 'light'
console.log(m);

اختيار النوع الحرفي أم العام

قاعدة عامة: استخدم const أو تعليقات صريحة للأنواع الحرفية عندما تحتاج إلى قيم دقيقة (مثل مفاتيح الإعدادات والقيم المميِّزة). دع عملية توسيع النوع تحدث للمتغيرات العادية القابلة للتغيير. إن معرفة النوع الذي ستحصل عليه تمنع أخطاء قابلية الإسناد المفاجئة.

const KEY = 'apiUrl';     // literal 'apiUrl'
let retries = 3;          // number
let level: 'low' | 'high' = 'low'; // pinned literal
console.log(KEY, retries, level);

تحقق سريع

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

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

أهم النقاط:

  • true وfalse نوعان حرفيان؛ وboolean يساوي true | false.
  • يُوسّع let إلى النوع العام (string أو number أو boolean).
  • يحافظ const على النوع الحرفي الدقيق.
  • استخدم تعليقًا بنوع حرفي لتثبيت let على اتحاد ضيق.

بعد ذلك سنجعل عدم القابلية للتغيير صريحًا باستخدام as const.

const literal = 'fixed'; // 'fixed'
let widened = 'fixed';   // string
let pinned: 'a' | 'b' = 'a';
console.log(literal, widened, pinned);

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

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

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

ماذا ستتعلم في «القيم المنطقية الحرفية واستنتاج النوع»؟

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

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

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

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

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

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

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

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

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