Frontend Academy · درس

أنواع Template Literal

اجمع بين أنواع السلاسل النصية الحرفية وبنية template literal لاشتقاق أنواع مثل أسماء الأحداث وسلاسل خصائص CSS ومسارات API

الدرس 1 من 413 خطوة

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

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

يمكن لـ TypeScript إنشاء أنواع سلاسل نصية من القوالب الحرفية على مستوى الأنواع. وبدمجها مع أنواع الاتحاد، يمكنكم التعبير عن آلاف السلاسل الصالحة من دون سرد كل واحدة منها.

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

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

type Greeting = `Hello, ${string}!`;
const a: Greeting = 'Hello, Alice!';  // OK
const b: Greeting = 'Hi, Alice!';     // Error

دمج أنواع الاتحاد

عند إدراج نوع اتحاد، ينشئ TypeScript حاصل الضرب الديكارتي لجميع التركيبات.

type Direction = 'top' | 'right' | 'bottom' | 'left';
type Property = 'margin' | 'padding';

type Side = `${Property}-${Direction}`;
// 'margin-top' | 'margin-right' | ... | 'padding-left' (8 strings)

استنتاج أسماء الأحداث

اشتقوا أسماء معالجات الأحداث من أسماء الأحداث — فهذا استخدام عملي شائع.

type EventName = 'click' | 'focus' | 'blur' | 'change';
type HandlerName = `on${Capitalize<EventName>}`;
// 'onClick' | 'onFocus' | 'onBlur' | 'onChange'

type Handlers = { [K in HandlerName]?: (e: Event) => void };
// { onClick?: ...; onFocus?: ...; onBlur?: ...; onChange?: ... }

أنواع الأدوات لمعالجة السلاسل

يوفر TypeScript مساعدين مضمّنين: Uppercase<T> وLowercase<T> وCapitalize<T> وUncapitalize<T>.

type Hi = Capitalize<'hello'>;    // 'Hello'
type Yell = Uppercase<'hello'>;   // 'HELLO'
type Quiet = Lowercase<'HELLO'>;  // 'hello'
type Lower = Uncapitalize<'Hi'>;  // 'hi'

أنواع خصائص CSS

عبّروا عن أنواع سلاسل شبيهة بـ CSS: قيم البكسل، والألوان السداسية، والنسب المئوية.

type Px = `${number}px`;
type Hex = `#${string}`;
type Pct = `${number}%`;

type Style = { padding: Px; color: Hex; width: Pct };

const s: Style = { padding: '8px', color: '#fff', width: '50%' }; // OK
const bad: Style = { padding: '8', color: 'white', width: '50' }; // Error

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

يمكن للكلمة المفتاحية infer استخراج أجزاء من نوع سلسلة نصية — وهو أمر مفيد للمحللات وأنواع المسارات.

type ExtractName<T> = T extends `Hello, ${infer Name}!` ? Name : never;

type Result = ExtractName<'Hello, Alice!'>;  // 'Alice'

أنواع مسارات API

مسارات API آمنة من ناحية الأنواع: استخرجوا معلمات المسار من نمط سلسلة نصية.

type PathParams<T extends string> =
  T extends `${string}/:${infer Param}/${infer Rest}`
    ? { [K in Param | keyof PathParams<`/${Rest}`>]: string }
    : T extends `${string}/:${infer Param}`
    ? { [K in Param]: string }
    : {};

type P = PathParams<'/users/:userId/posts/:postId'>;
// { userId: string; postId: string }

أنواع اقتراح فئات Tailwind

قيّدوا خصائص السلاسل النصية بقيم نظام التصميم المعروفة.

type Spacing = 0 | 1 | 2 | 4 | 8 | 16;
type Side = 't' | 'r' | 'b' | 'l';
type TwSpacing = `m${Side}-${Spacing}` | `p${Side}-${Spacing}`;
// 'mt-0' | 'mt-1' | ... | 'pl-16'

function Box(props: { className: TwSpacing }) { /* ... */ }

الحدود وأداء المترجم

قد تنفجر حاصل الضرب الديكارتي للقوالب الحرفية (فاتحاد حجمه 50 × 50 ينتج 2500 سلسلة). سيترجم TypeScript الشيفرة، لكن الاستنتاج سيصبح بطيئًا. أبقوا مجموعة الرموز صغيرة.

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

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

تحقق سريع

إلى ماذا يُقيّم type X = `on${Capitalize<'click' | 'focus'>}`؟

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

أنشئوا أنواع سلاسل نصية من القوالب الحرفية مع أنواع اتحاد مُدرجة. تنفجر حاصل الضرب الديكارتي بسرعة، لذا أبقوا مجموعات الرموز صغيرة. استخدموا Capitalize/Uppercase/Lowercase/Uncapitalize. ادمجوها مع infer لاستخراج أجزاء من السلاسل. وهي مفيدة جدًا لأسماء الأحداث، وقيم CSS، ومعلمات المسارات، وأسماء فئات نظام التصميم.

البدء مجانًا

تعلم HTML مع معلم ذكاء اصطناعي — مجانًا

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

الدورات
41
الدروس
163

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

هل درس «أنواع Template Literal» مجاني؟

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

ماذا ستتعلم في «أنواع Template Literal»؟

اجمع بين أنواع السلاسل النصية الحرفية وبنية template literal لاشتقاق أنواع مثل أسماء الأحداث وسلاسل خصائص CSS ومسارات API تتمرن على Frontend Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

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

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

كم من الوقت يستغرق درس «أنواع Template Literal»؟

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

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

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

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

  1. أنواع Template Literal
  2. Decorators والبيانات الوصفية
  3. TypeScript مع React: الأنواع العامة لـ FC وhooks
  4. الوضع الصارم والتخلّص من any
← العودة إلى Frontend Academy