Menu
flag Ar iconالعربيةdown icon

النصوص في TypeScript: الإدراج والنصوص متعددة الأسطر والبحث

العمل مع النصوص في TypeScript: إدراج القيم باستخدام template literals، والنصوص متعددة الأسطر، والتحقق من احتواء نص على نص فرعي، والدوال الشائعة والأنواع التي تعيدها، وأنواع النصوص الحرفية.

تحتوي هذه الصفحة على محررات قابلة للتشغيل - حرّر، شغّل، وشاهد النتيجة فوراً.

النص في TypeScript هو نص JavaScript نوعه string. لإدراج القيم، اكتب template literal: علامات backtick مع عناصر نائبة ${expression}. أما علامات الاقتباس المفردة والمزدوجة فتنتج نصوصًا عادية دون إدراج.

أنماط علامات الاقتباس الثلاثة تنتج النوع نفسه، string. أول $ في $${...} علامة دولار حرفية؛ و${ وحدها تبدأ عنصرًا نائبًا.

إدراج القيم في النصوص

داخل ${ } يمكنك وضع متغير أو عملية حسابية أو استدعاء دالة أو تعبير شرطي ثلاثي أو template literal متداخل. تُحوَّل القيمة إلى نص بالطريقة نفسها التي يحوّلها بها String(value) (الاستثناء هو symbol: إدراجه خطأ الترجمة TS2731، وكان سيرمي TypeError وقت التشغيل؛ اكتب String(sym)).

إدراج كائن يطبع [object Object]، وهذا ما لا تريده في أغلب الأحوال. اختر الحقول، أو استخدم JSON.stringify(obj).

النصوص متعددة الأسطر

يمكن أن يمتد template literal على عدة أسطر. تُحفظ فواصل الأسطر، وتُحفظ كذلك أي مسافات بادئة في بداية كل سطر، لأن كل ما بين علامتي backtick جزء من النص.

عندما تتسرب المسافات البادئة في كودك إلى النص، ابنِه بمصفوفة وjoin("\n")، أو اجعل أسطر template literal تبدأ من أول السطر.

التحقق من أن نصًا يحتوي على نص فرعي

يجيب includes عن سؤال «هل يحتوي» بقيمة boolean. ويفحص startsWith وendsWith الطرفين. ويعطي indexOf الموضع، أو -1 عند غياب النص الفرعي. كلها حساسة لحالة الأحرف.

يقبل includes أيضًا موضع بدء: file.includes("R", 1) يبحث ابتداءً من الفهرس 1 فقط.

الدوال الشائعة وأنواعها

تعرف TypeScript نوع القيمة المُعادة لكل دالة مدمجة. الدوال التي قد تعود فارغة هي ما يجب الانتباه إليه، لأنه تحت strict يجب أن تعالج null أو undefined قبل استخدام الناتج.

الدالةتعيدمثال
includes وstartsWith وendsWithboolean"abc".includes("b") يساوي true
indexOf وlastIndexOfnumber (-1 عند الغياب)"abc".indexOf("c") يساوي 2
slice وsubstringstring"hello".slice(1, 3) يساوي "el"
splitstring[]"a,b".split(",") يساوي ["a", "b"]
trim وtrimStart وtrimEndstring" x ".trim() يساوي "x"
toUpperCase وtoLowerCasestring"Ts".toUpperCase() يساوي "TS"
padStart وpadEndstring"7".padStart(3, "0") يساوي "007"
replace وreplaceAllstring"a-b-c".replaceAll("-", "") يساوي "abc"
repeatstring"ab".repeat(2) يساوي "abab"
atstring | undefined"abc".at(-1) يساوي "c"
matchRegExpMatchArray | null"a1".match(/\d/)
length (خاصية)number"abc".length يساوي 3

الوصول العادي بالفهرس، s[5]، نوعه string حتى عندما يتجاوز الفهرس النهاية (حيث تكون القيمة undefined وقت التشغيل). خيار المترجم noUncheckedIndexedAccess يجعله string | undefined بدلًا من ذلك.

النصوص غير قابلة للتغيير

لا يمكنك تغيير حرف في مكانه. تبلّغ TypeScript عن الإسناد إلى فهرس بالخطأ TS2542، Index signature in type 'String' only permits reading.، وفي كود JavaScript بالوضع الصارم الذي يُترجم إليه، كان الإسناد نفسه سيرمي TypeError وقت التشغيل. كل دالة تبدو كأنها تعدّل نصًا تعيد نصًا جديدًا.

لتحويل قيم أخرى إلى نصوص، أو نصوص إلى أرقام، انظر تحويل النص إلى رقم.

أنواع النصوص الحرفية

يقبل string أي نص. أما نوع النص الحرفي فيقبل قيمة واحدة بالضبط، وunion منها يصنع مجموعة من النصوص المسموحة تشبه enum:

تُفحص الأنواع الحرفية وقت الترجمة فقط؛ وقت التشغيل سيعمل label("deleted") رغم ذلك ويطبع Post is deleted، وهذا ما يفعله السطر الثاني هنا. وتعمل صياغة template literal أيضًا على مستوى الأنواع، كما في type EventName = `on${string}`، الذي يقبل أي نص يبدأ بـ on.

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

كيف أدرج قيمًا داخل نص في TypeScript؟

استخدم template literal: علامات backtick مع عناصر نائبة ${expression}، كما في `Hello, ${name}!`. أي تعبير يعمل داخل الأقواس، ونوع الناتج string. علامات الاقتباس المفردة والمزدوجة لا تدرج القيم.

كيف أكتب نصًا متعدد الأسطر في TypeScript؟

ضع النص بين علامتي backtick واكسر الأسطر في الكود المصدري: يحتفظ template literal بفواصل الأسطر وأيضًا بالمسافات البادئة في كل سطر. وبدلًا من ذلك يمكنك دمج مصفوفة من الأسطر بـ .join("\n")، أو استخدام \n داخل نص عادي.

كيف أتحقق من أن نصًا يحتوي على نص فرعي في TypeScript؟

استدعِ text.includes("part")، الذي يعيد boolean. إنه حساس لحالة الأحرف، لذلك قارن نصوصًا بأحرف صغيرة لفحص لا يميز حالة الأحرف: text.toLowerCase().includes(part.toLowerCase()). يفحص startsWith وendsWith الطرفين، ويعيد indexOf الموضع أو -1.

هل هناك فرق بين النصوص في TypeScript و JavaScript؟

لا، وقت التشغيل هي نصوص JavaScript نفسها بالدوال نفسها. تضيف TypeScript النوع string، وتتحقق من أنك تستدعي دوالًا موجودة، وتعرف أنواع القيم المُعادة، مثل أن match قد تعيد null وأن at قد تعيد undefined.

هل يمكن تغيير حرف في نص TypeScript؟

لا. النصوص غير قابلة للتغيير، وs[0] = "H" هو خطأ الترجمة TS2542 (Index signature in type 'String' only permits reading). أنشئ نصًا جديدًا بدلًا من ذلك: "H" + s.slice(1).

Coddy programming languages illustration

تعلّم البرمجة مع Coddy

ابدأ الآن