0Pricing
TypeScript Academy · درس

تقسيم السلاسل على مستوى النوع

قسّموا السلاسل إلى صفائف داخل نظام الأنواع

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

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

يمكن لنظام الأنواع مطابقة الأنماط في الأنواع الحرفية للسلاسل النصية باستخدام الأنواع الحرفية للقوالب مع infer. وهذه هي الأداة الأساسية لتحليل السلاسل النصية على مستوى الأنواع.

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

type StartsWithA<S> = S extends Tpl<'a', string> ? true : false;
// Tpl<'a', string> is a backtick template literal type: 'a' then anything

type X = StartsWithA<'abc'>; // true
type Y = StartsWithA<'bcd'>; // false

استنتاج لاحقة

ضعوا infer داخل القالب لالتقاط جزء من السلسلة النصية. نلتقط هنا كل ما يأتي بعد "a" في البداية.

type AfterA<S> = S extends Tpl<'a', infer Rest> ? Rest : never;
// Tpl<'a', Rest> captures everything after a leading 'a'

type X = AfterA<'abc'>; // 'bc'

التقسيم عند فاصل

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

type SplitOnce<S, Sep extends string> =
  S extends Tpl<infer Head, Sep, infer Tail>
    ? [Head, Tail]
    : [S];
// Tpl<Head, Sep, Tail> matches up to the first separator

type X = SplitOnce<'a-b-c', '-'>; // ['a', 'b-c']

التقسيم التكراري

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

type Split<S extends string, Sep extends string> =
  S extends Tpl<infer Head, Sep, infer Tail>
    ? [Head, ...Split<Tail, Sep>]
    : [S];
// recurse on Tail until no separator remains

type X = Split<'a.b.c', '.'>; // ['a', 'b', 'c']

تتبّع التكرار

تتبّعوا Split<"a.b.c", ".">:

  • الرأس "a"، والذيل "b.c" -> ["a", ...Split<"b.c">]
  • الرأس "b"، والذيل "c" -> ["b", ...Split<"c">]
  • لا يحتوي "c" على "."، إذن هذه هي الحالة الأساسية -> ["c"]

النتيجة: ["a", "b", "c"].

type X = Split<"one,two", ",">; // ["one", "two"]
type Y = Split<"x/y/z", "/">; // ["x", "y", "z"]

التعامل مع الأجزاء الفارغة

قد ينتج عن التقسيم سلاسل نصية فارغة عندما تكون الفواصل متجاورة أو موجودة عند الحواف. يظل النمط مطابقًا، ويستنتج Head أو Tail فارغًا.

type X = Split<"a,,b", ",">; // ["a", "", "b"]
type Y = Split<",a", ",">;   // ["", "a"]

إعادة الوصل

عكس split هو join: مرّروا على صفيف من السلاسل النصية واجمعوها مع فاصل باستخدام قالب حرفي. ويتوافق هذا طبيعيًا مع split.

type Join<T extends string[], Sep extends string> =
  T extends [infer H extends string, ...infer R extends string[]]
    ? R extends [] ? H : Tpl<H, Sep, Join<R, Sep>>
    : '';
// Tpl<...> denotes a template literal type concatenation

type X = Join<['a', 'b', 'c'], '-'>; // 'a-b-c'

إزالة المسافات البيضاء

تتآلف أدوات السلاسل النصية. يزيل نوع Trim المسافات في البداية والنهاية من خلال إزالة مسافة بشكل متكرر باستخدام استدلال القالب.

type TrimLeft<S extends string> =
  S extends Tpl<' ', infer R> ? TrimLeft<R> : S;
type TrimRight<S extends string> =
  S extends Tpl<infer R, ' '> ? TrimRight<R> : S;
type Trim<S extends string> = TrimRight<TrimLeft<S>>;
// Tpl<' ', R> strips a leading space; Tpl<R, ' '> strips a trailing one

type X = Trim<'  hi  '>; // 'hi'

استبدال السلاسل الفرعية

يعمل Replace من خلال التقسيم حول الهدف ثم إعادة الوصل باستخدام البديل، وكل ذلك عبر استدلال القالب والتكرار.

type ReplaceAll<S extends string, From extends string, To extends string> =
  S extends Tpl<infer A, From, infer B>
    ? Tpl<A, To, ReplaceAll<B, From, To>>
    : S;
// split around From, then rejoin with To via template literal types

type X = ReplaceAll<'a-b-c', '-', '_'>; // 'a_b_c'

أهمية التقسيم

التقسيم هو أساس التحليل المنظّم. تُقسَّم المسارات عند "/"، وتُقسَّم سلاسل الاستعلام عند "&"، وتُقسَّم صفوف CSV عند ",". باستخدام Split، تحوّلون نوع سلسلة نصية مسطّحة إلى صفيف يمكنكم معالجته عنصرًا تلو الآخر.

type Segments = Split<"users/42/posts", "/">; // ["users", "42", "posts"]

الحذر من العمق

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

type Ok = Split<"a/b/c/d/e", "/">; // fine for small strings

تحقّق سريع

اختبروا فهمكم لتقسيم السلاسل النصية على مستوى الأنواع.

مراجعة

قسّمتم السلاسل النصية بالكامل داخل الأنواع.

  • تطابق الأنواع الحرفية للقوالب مع infer أجزاء السلسلة النصية وتلتقطها.
  • يقسم SplitOnce عند أول فاصل، بينما ينتج التكرار Split كاملًا.
  • يتآلف كل من Join وTrim وReplaceAll باستخدام الأدوات نفسها.

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

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

هل درس «تقسيم السلاسل على مستوى النوع» مجاني؟

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

ماذا ستتعلم في «تقسيم السلاسل على مستوى النوع»؟

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

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

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

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

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

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

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

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

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