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

الأنواع في TypeScript: string وnumber وboolean وغيرها

الأنواع المدمجة في TypeScript: string وnumber وboolean وbigint وsymbol وnull وundefined، إضافة إلى لمحة عن المصفوفات والكائنات. كيف تكتب تعليق نوع، ولماذا لا يوجد نوع للأعداد الصحيحة، ولماذا تكتب string بدل String.

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

تصف أنواع TypeScript نوع القيمة التي يمكن أن يحملها متغير. تكتب النوع بعد نقطتين، let name: string، فيرفض المترجم أي كود يضع هناك قيمة من نوع خاطئ. الأنواع الأساسية هي الأنواع البدائية السبعة في JavaScript، إضافة إلى أنواع الكائنات للمصفوفات والكائنات.

تُفحص تعليقات الأنواع وقت الترجمة ثم تُحذف. البرنامج الذي يعمل هو JavaScript عادية.

الأنواع البدائية

النوعأمثلة على القيمملاحظات
string"hi" و'hi' و`hi ${name}`نص. أنماط علامات الاقتباس الثلاثة لها النوع نفسه.
number42 و3.14 و-0.5 وNaN وInfinityكل الأرقام، صحيحة كانت أم لا. لا يوجد int ولا float.
booleantrue وfalseهاتان القيمتان فقط.
bigint10n وBigInt(10)أعداد صحيحة بأي حجم. يحتاج إلى هدف ES2020 أو ما بعده.
symbolSymbol("id")قيمة فريدة، تُستخدم غالبًا كمفتاح في كائن.
nullnull«فارغ عن قصد».
undefinedundefined«غير مضبوط». وهو أيضًا ما تُقرأ به الخاصية الغائبة.

أسماء الأنواع بأحرف صغيرة. ويعيد typeof وقت التشغيل الكلمات نفسها لمعظمها، لذلك فإن typeof x === "number" هي طريقة التحقق من النوع البدائي لقيمة أثناء تشغيل البرنامج.

تعليقات الأنواع

التعليق هو : Type بعد متغير أو معامل أو قائمة معاملات دالة. المعاملات هي المكان الذي تهم فيه التعليقات أكثر، لأن TypeScript لا تستطيع تخمين ما سيمرره المستدعي.

عندما يُهيأ المتغير في السطر نفسه، يكون التعليق زائدًا عادة: let count = 10 نوعه number أصلًا. قواعد ترك الأنواع موجودة في صفحة استنتاج الأنواع.

النوع الخاطئ خطأ ترجمة

أسند قيمة من نوع خاطئ فيتوقف المترجم قبل تشغيل أي شيء:

يطبع المترجم:

index.ts(3,1): error TS2322: Type 'string' is not assignable to type 'number'.

الحل هو تحويل القيمة، port = Number("3000")، أو تغيير التعليق إذا كان المتغير يجب فعلًا أن يحمل نصًا.

number: لا يوجد نوع للأعداد الصحيحة

تخزن JavaScript كل رقم كقيمة عشرية 64 بت، لذلك لدى TypeScript نوع واحد هو number. الأعداد الصحيحة دقيقة حتى Number.MAX_SAFE_INTEGER (2 ** 53 - 1). وبعد ذلك استخدم bigint.

لا يختلط bigint وnumber: exact + 1 خطأ ترجمة (TS2365: Operator '+' cannot be applied to types 'bigint' and '1'.، حيث '1' هو النوع الحرفي للقيمة 1)، ولو شُغّل لكان TypeError وقت التشغيل أيضًا. حوّل أحد الطرفين صراحة بـ BigInt(1) أو Number(exact)، مع العلم أن Number يقرّب القيم التي تتجاوز النطاق الآمن.

إذا أردت نوعًا لا يقبل إلا الأعداد الصحيحة، فلا تستطيع TypeScript التعبير عنه لقيم عشوائية. تحقق بـ Number.isInteger عند دخول القيمة إلى برنامجك.

boolean

لـ boolean قيمتان بالضبط، true وfalse. القيم التي تُعد صحيحة منطقيًا فقط (1 و"yes") ليست من نوع boolean، لذلك حوّلها بـ Boolean(x) أو x !== 0.

null و undefined

مع تفعيل strict (وهو الافتراضي منذ TypeScript 6.0)، يكون null وundefined نوعين منفصلين، وليسا جزءًا من string أو number أو أي نوع آخر. المتغير الذي قد يكون فارغًا يصرّح بذلك باستخدام union:

قراءة خاصية من قيمة قد تكون undefined خطأ ترجمة حتى تتحقق منها. تغطي صفحة null و undefined هذه الفحوص و?. و??.

لمحة عن المصفوفات والكائنات

كل ما ليس نوعًا بدائيًا هو نوع كائن. الأشكال الثلاثة التي تقابلها أولًا:

let tags: string[] = ["ts", "js"];               // array of strings
let point: { x: number; y: number } = { x: 1, y: 2 }; // object with two number properties
let greet: (name: string) => string = (n) => `hi ${n}`; // function type

لكل منها صفحة خاصة: المصفوفات، وtuples (مصفوفات ذات طول ثابت)، وأنواع الكائنات، وأنواع الدوال.

string وnumber وboolean مقابل String وNumber وBoolean

الأسماء التي تبدأ بحرف كبير هي أنواع الكائنات المغلِّفة في JavaScript (new String("x"))، لا أنواع القيم العادية. اكتب التعليقات بالأسماء ذات الأحرف الصغيرة.

index.ts(3,7): error TS2322: Type 'String' is not assignable to type 'string'.
  'string' is a primitive, but 'String' is a wrapper object. Prefer using 'string' when possible.

غيّر String إلى string في السطر الأول فيعمل المثال. وينطبق الأمر نفسه على Number وBoolean وSymbol وBigInt. (أما Object فحالة مختلفة: يقبل أي قيمة تقريبًا، ومنها القيم البدائية؛ انظر أنواع الكائنات.)

أنواع مدمجة أخرى

تظهر بعض الأنواع الأخرى مبكرًا. لكل منها صفحة خاصة.

النوعمعناه
anyيوقف الفحص لتلك القيمة. تجنبه.
unknownأي قيمة، لكن يجب أن تتحقق منها قبل استخدامها.
voidالدالة لا تعيد شيئًا مفيدًا.
neverلا قيمة على الإطلاق: دالة ترمي خطأ دائمًا، أو حالة مستحيلة.
objectأي قيمة غير بدائية.
"red" | "green"نوع حرفي: هذه القيم بالضبط فقط.

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

هل في TypeScript نوع للأعداد الصحيحة؟

لا. يغطي number الأعداد الصحيحة والعشرية معًا، لأن JavaScript تخزن كل رقم كعدد عشري 64 بت. تحقق من أن العدد صحيح وقت التشغيل بـ Number.isInteger(n)، واستخدم bigint (10n) عندما تحتاج إلى أعداد صحيحة أكبر من Number.MAX_SAFE_INTEGER (2 ** 53 - 1) دون فقدان الدقة.

ما الفرق بين string و String في TypeScript؟

string هو النوع البدائي، وهو نوع النصوص الحرفية وقوالب النصوص. أما String فهو نوع الكائن المغلِّف الذي ينشئه new String("x"). اكتب دائمًا الأنواع بالأحرف الصغيرة string وnumber وboolean؛ وإسناد String إلى string خطأ ترجمة (TS2322).

ما الأنواع البدائية في TypeScript؟

الأنواع السبعة نفسها كما في JavaScript: string وnumber وboolean وbigint وsymbol وnull وundefined. وكل ما عداها (المصفوفات والكائنات والدوال ونسخ الأصناف) أنواع كائنات.

كيف أعرّف متغيرًا بنوع محدد في TypeScript؟

ضع نقطتين ثم النوع بعد الاسم: let count: number = 0;. وفي الدالة، حدد نوع كل معامل ونوع القيمة المُعادة اختياريًا: function add(a: number, b: number): number. وعندما يُهيأ المتغير بقيمة، يمكنك عادة ترك النوع لتستنتجه TypeScript.

هل أنواع TypeScript موجودة وقت التشغيل؟

لا. يفحص المترجم الأنواع ثم يحذفها، فلا يحتوي كود JavaScript الذي يعمل على أي تعليقات أنواع. وقت التشغيل تتحقق من القيم بعوامل JavaScript مثل typeof وArray.isArray وinstanceof.

Coddy programming languages illustration

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

ابدأ الآن