0Pricing
TypeScript Academy · درس

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

استخرجوا بيانات مهيكلة من السلاسل باستخدام infer

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

من التقسيم إلى البنية

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

الترميز: تكتب TypeScript الفعلية الأنواع الحرفية للقوالب باستخدام سلاسل محاطة بعلامتي backtick وتحتوي على مواضع بالصيغة dollar-brace. نعرض هذا النمط في هذه المقاطع بصيغة Tpl<...>، مع سرد كل جزء بالترتيب؛ فمثلًا، يظهر قالب backtick المطابق للبادئة الحرفية ثم Rest بالشكل Tpl<'prefix', infer Rest>.

type KeyValue<S> =
  S extends Tpl<infer K, '=', infer V> ? { key: K; value: V } : never;
// Tpl<K, '=', V> matches K, an equals sign, then V

type X = KeyValue<'name=alice'>; // { key: 'name'; value: 'alice' }

نقاط استدلال متعددة

يمكن لنمط واحد التقاط عدة حقول في الوقت نفسه. لتحليل "GET /users"، استنتجوا الطريقة والمسار في شرط واحد.

type Request<S> =
  S extends Tpl<infer Method, ' ', infer Path>
    ? { method: Method; path: Path }
    : never;
// Tpl<Method, ' ', Path> matches the method, a space, then the path

type X = Request<'GET /users'>; // { method: 'GET'; path: '/users' }

تقييد الأجزاء المستنتجة

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

type Method = 'GET' | 'POST';
type Parse<S> =
  S extends Tpl<(infer M extends Method), ' ', infer P>
    ? { method: M; path: P }
    : never;
// the inferred M is constrained to Method inside the template pattern

type X = Parse<'POST /x'>; // { method: 'POST'; path: '/x' }

تحليل أزواج المفتاح والقيمة

اجمعوا بين التقسيم والتحليل: قسّموا سلسلة الاستعلام إلى أزواج، ثم حلّلوا كل زوج إلى مفتاح وقيمة. والنتيجة صفيف من الإدخالات المنظّمة.

type Pair<S> =
  S extends Tpl<infer K, '=', infer V> ? [K, V] : [S, ''];
// Tpl<K, '=', V> splits a 'key=value' string literal type

type X = Pair<'page=2'>; // ['page', '2']

بناء كائن من أزواج

اطووا صفيفًا من أزواج المفتاح والقيمة في نوع كائن باستخدام مُجمِّع من نوع mapped/intersection. يضيف كل زوج خاصية واحدة.

type FromPairs<T extends [string, string][]> =
  T extends [[infer K extends string, infer V], ...infer R extends [string, string][]]
    ? { [P in K]: V } & FromPairs<R>
    : {};

type X = FromPairs<[["a", "1"], ["b", "2"]]>; // { a: "1" } & { b: "2" }

تحليل سلسلة استعلام

اجمعوا كل ذلك: قسّموا عند "&"، وحلّلوا كل جزء عند "="، ثم ابنوا الكائن. يعرف المصرّف الآن المفاتيح الدقيقة لسلسلة استعلام حرفية.

type ParseQuery<S extends string> =
  FromPairs<{ [I in keyof SplitAmp<S>]: Pair<SplitAmp<S>[I] & string> }>;
// where SplitAmp splits on "&" (from previous lesson)

استخراج الأرقام

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

type IsNumeric<S extends string> =
  S extends Tpl<number> ? true : false;
// Tpl<number> is a template literal type that matches any numeric string

type X = IsNumeric<'42'>; // true
type Y = IsNumeric<'4a'>; // false

الأجزاء الاختيارية

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

type ParsePath<S> =
  S extends Tpl<infer Base, '?', infer Query>
    ? { base: Base; query: Query }
    : { base: S; query: '' };
// Tpl<Base, '?', Query> matches an optional query after a question mark

type X = ParsePath<'/x?a=1'>; // { base: '/x'; query: 'a=1' }

المسافات البيضاء والحالات الحدّية

تحتوي السلاسل الحقيقية على مسافات زائدة. ألّفوا محلّلكم مع Trim من الدرس السابق حتى لا تفسد المسافات البيضاء في البداية والنهاية الحقول المستخرجة.

type CleanKey<S extends string> = Trim<S>;
// Apply Trim to each inferred segment before using it

لماذا يُعد هذا قويًا

يتيح تحليل القوالب الحرفية للمصرّف فهم التنسيقات: التواريخ، والمسارات، ومفاتيح البيئة، وأجزاء SQL. وتتحول السلاسل المكتوبة خطأً إلى أخطاء في الترجمة، كما يمكن للأنواع اللاحقة أن تعتمد على البنية المحلَّلة. وهكذا تصبح السلسلة الحرفية قيمة ذات نوع.

type Event<S> =
  S extends Tpl<infer Domain, ':', infer Action>
    ? { domain: Domain; action: Action }
    : never;
// Tpl<Domain, ':', Action> matches 'domain:action'
type X = Event<'user:created'>; // { domain: 'user'; action: 'created' }

تأليف المحلّلات

كما هو الحال مع المُركِّبات على مستوى القيم، تتآلف المحلّلات على مستوى الأنواع. قسّموا كل جزء، ثم حلّلوه، ثم اجمعوا الأجزاء في كائن. كل خطوة نوع شرطي صغير، وتشكل الخطوات معًا محلّلًا كاملًا ذا أنواع.

// Split -> Pair -> FromPairs is a parser pipeline at the type level

تحقّق سريع

اختبروا فهمكم لتحليل القوالب الحرفية.

مراجعة

استخرجتم بيانات منظّمة من أنواع السلاسل النصية.

  • تلتقط نقاط infer المتعددة حقولًا مُسمّاة في نمط واحد.
  • يمكن تقييد الأجزاء المستنتجة باستخدام extends ضمنيًا.
  • تتآلف Split وPair وFromPairs لتكوين محلّل للاستعلامات.
  • يتعامل Trim والتحقّقات الرقمية مع الحالات الحدّية.

التالي: محلّل مسارات مصغّر ومتكامل.

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

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

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

ماذا ستتعلم في «التحليل باستخدام القوالب الحرفية»؟

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

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

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

كم من الوقت يستغرق درس «التحليل باستخدام القوالب الحرفية»؟

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

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

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

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

  1. مفاهيم مُركّبات المحلل
  2. تقسيم السلاسل على مستوى النوع
  3. التحليل باستخدام القوالب الحرفية
  4. محلل مسارات مصغّر على مستوى النوع
← العودة إلى TypeScript Academy