الانتقال إلى المحتوى الرئيسي
الوحدة 5 · الدرس 2 من 210/14 في الدورة~15 min
دروس الوحدة (2/2)

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

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

أنواع حرفية

يمثل النوع الحرفي قيمة واحدة محددة (على سبيل المثال، سلسلة أو رقم محدد). عادة ما يتم دمجها مع أنواع النقابات:

TS
type TrafficLight = 'red' | 'yellow' | 'green';
let light: TrafficLight;

light = 'red'; // OK
light = 'blue'; // Error: "blue" is not assignable to TrafficLight

نوع التأكيدات (as)

في بعض الأحيان يكون لديك معلومات حول نوع لا يمكن لـ TypeScript معرفته في وقت الترجمة. في هذه الحالات، يمكنك استخدام تأكيد النوع باستخدام الكلمة الأساسية as:

TS
const myCanvas = document.getElementById('main_canvas') as HTMLCanvasElement;

يخبر التأكيد المترجم: "ثق بي، أعلم أن هذا العنصر هو HTMLCanvasElement". ولا يقوم بإجراء أي عمليات فحص أو إرسال في وقت التشغيل؛ فهو يساعد فقط مدقق النوع.

التأكيدات الثابتة (as const)

عندما نعلن عن كائن أو مصفوفة باستخدام const، فإن TypeScript لا يزال يسمح بتعديل خصائصه الداخلية. بإضافة as const في النهاية، يتم تجميد البنية بأكملها وجعلها للقراءة فقط، وتحويل جميع الخصائص إلى أنواعها الحرفية الدقيقة:

TS
const colors = ['red', 'green', 'blue'] as const;
// colors[0] = "yellow"; // Error: array is read-only

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

يتم إنشاء الأنواع الحرفية للقالب أعلى سلاسل قالب JavaScript، ولكنها تُستخدم في مواضع الكتابة. أنها تسمح بدمج أنواع حرفية متعددة في نوع واحد:

TS
type Size = 'small' | 'large';
type Color = 'red' | 'blue';

// Creates the union: "small-red" | "small-blue" | "large-red" | "large-blue"
type ItemId = `${Size}-${Color}`;

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

يوفر TypeScript أنواع أدوات مساعدة خاصة لمعالجة الأحرف ضمن الأنواع الحرفية للقالب:

  • Capitalize<StringType>: تكبير الحرف الأول من السلسلة.
  • Uncapitalize<StringType>: إلغاء كتابة الحرف الأول من السلسلة.
  • Uppercase<StringType>: تحويل السلسلة بأكملها إلى أحرف كبيرة.
  • Lowercase<StringType>: تحويل السلسلة بأكملها إلى أحرف صغيرة.
TS
type ActionType = 'click' | 'hover';

// Generates: "onClick" | "onHover"
type EventHandlers = `on${Capitalize<ActionType>}`;

جربه بنفسك

التمرين 1: اتجاه الاتحاد الحرفي

تمرين#ts.m5.l2.e1
المحاولات: 0جارٍ التحميل…

قم بتحديد نوع حرفي يسمى Direction والذي يقبل فقط السلاسل "up" أو "down" أو "left" أو "right". ثم أعلن عن دالة اسمها move(dir: Direction): سلسلة تُرجع السلسلة "Moving" متبوعة بالاتجاه المستلم.

جارٍ تحميل المحرر…
إظهار التلميح

حدد الاسم المستعار للنوع أولاً مع الخيارات الأربعة المفصولة بـ |، ثم أعلن عن وظيفة النقل التي توضح المعلمة ونوع الإرجاع.

الحل متاح بعد 3 من المحاولات

التمرين 2: التأكيد على JSON.parse

تمرين#ts.m5.l2.e2
المحاولات: 0جارٍ التحميل…

تقوم الدالة JSON.parse بإرجاع أي نوع بشكل افتراضي. قم بتعديل وظيفة parseUser بحيث يتم تأكيد نتيجة JSON.parse(json) كنوع { username: string } باستخدام الكلمة الأساسية as.

جارٍ تحميل المحرر…
إظهار التلميح

أضف "باسم { username: string }" مباشرة بعد استدعاء JSON.parse(json).

الحل متاح بعد 3 من المحاولات

التمرين 3: النموذج الحرفي للأحداث

تمرين#ts.m5.l2.e3
المحاولات: 0جارٍ التحميل…

بالنظر إلى أنواع الحالة والإجراء، حدد نوع سلسلة قالب يسمى الحدث بتنسيق "الحالة-الإجراء" (على سبيل المثال، "النقر المفتوح").

جارٍ تحميل المحرر…
إظهار التلميح

استخدم علامات التحديد الخلفية لتحديد النوع، وبناء جملة ${Status}-${Action} بداخله.

الحل متاح بعد 3 من المحاولات

التمرين 4: النوع الحرفي للقالب مع الكتابة بالأحرف الكبيرة

تمرين#ts.m5.l2.e4
المحاولات: 0جارٍ التحميل…

حدد نوع الحدث الحرفي الذي يمكن أن يكون "النقر" أو "التمرير". بعد ذلك، استخدم "الأنواع الحرفية للقالب" للإعلان عن نوع EventHandler يمثل سلاسل بالتنسيق متبوعًا باسم الحدث الكبير (على سبيل المثال، "onClick" أو "onHover").

جارٍ تحميل المحرر…
إظهار التلميح

استخدم Capitalize<Event> داخل القالب الحرفي لتكبير الحرف الأول من الحدث.

الحل متاح بعد 3 من المحاولات