الأنواع الأولية
يدعم TypeScript سبعة أنواع أولية. يشير نوع البيانات الأولي إلى نوع ليس كائنًا ولا ترتبط به أي أساليب. في TypeScript، تكون جميع الأنواع الأولية غير قابلة للتغيير، ما يعني أنه لا يمكن تغيير قيمها بعد إسنادها.
string
يخزّن النوع البدائي string البيانات النصية، وتكون القيمة دائمًا محاطة بعلامتي اقتباس مزدوجتين أو مفردتين.
const x: string = 'x';const y: string = 'y';يمكن أن تمتد السلاسل النصية عبر عدة أسطر إذا أُحيطت بعلامة الفاصلة العليا المائلة (`):
let sentence: string = `xxx, yyy`;boolean
يخزّن نوع البيانات boolean في TypeScript قيمة ثنائية، إما true وإما false.
const isReady: boolean = true;number
يُمثَّل نوع البيانات number في TypeScript بقيمة فاصلة عائمة ذات 64 بت. ويمكن لنوع number تمثيل الأعداد الصحيحة والكسور.
يدعم TypeScript أيضًا النظام السداسي عشري والثنائي والثماني، على سبيل المثال:
const decimal: number = 10;const hexadecimal: number = 0xa00d; // Hexadecimal starts with 0xconst binary: number = 0b1010; // Binary starts with 0bconst octal: number = 0o633; // Octal starts with 0obigint
يمثّل bigint قيمًا صحيحة يمكن أن تكون أكبر من الحد الأقصى للعدد الصحيح الآمن الذي يدعمه number، وهو 2^53 - 1.
يمكن إنشاء bigint باستدعاء الدالة المضمّنة BigInt() أو بإضافة n إلى نهاية أي قيمة عددية صحيحة حرفية:
const x: bigint = BigInt(9007199254740991);const y: bigint = 9007199254740991n;ملاحظات:
- لا يمكن مزج قيم
bigintمعnumber، ولا يمكن استخدامها مع الكائن المضمّنMath؛ بل يجب تحويلها قسرًا إلى النوع نفسه. - لا تتوفر قيم
bigintإلا إذا كان إعداد الهدف ES2020 أو إصدارًا أحدث.
Symbol
الرموز هي معرّفات فريدة يمكن استخدامها مفاتيحَ للخصائص في الكائنات لمنع تعارض الأسماء.
type Obj = { [sym: symbol]: number;};
const a = Symbol('a');const b = Symbol('b');let obj: Obj = {};obj[a] = 123;obj[b] = 456;
console.log(obj[a]); // 123console.log(obj[b]); // 456null وundefined
يمثّل النوعان null وundefined كلاهما انعدام القيمة أو غياب أي قيمة.
يعني النوع undefined أن القيمة لم تُسنَد أو تُهيّأ، أو يشير إلى غياب غير مقصود للقيمة.
يعني النوع null أننا نعلم أن الحقل لا يحتوي على قيمة، ومن ثم تكون القيمة غير متاحة، وهو يشير إلى غياب مقصود للقيمة.
Array
المصفوفة array هي نوع بيانات يمكنه تخزين عدة قيم من النوع نفسه أو من أنواع مختلفة. ويمكن تعريفها باستخدام الصياغة الآتية:
const x: string[] = ['a', 'b'];const y: Array<string> = ['a', 'b'];const j: Array<string | number> = ['a', 1, 'b', 2]; // Unionيدعم TypeScript المصفوفات المخصّصة للقراءة فقط باستخدام الصياغة الآتية:
const x: readonly string[] = ['a', 'b']; // Readonly modifierconst y: ReadonlyArray<string> = ['a', 'b'];const j: ReadonlyArray<string | number> = ['a', 1, 'b', 2];j.push('x'); // Invalidيدعم TypeScript أنواع Tuple وأنواع Tuple المخصّصة للقراءة فقط:
const x: [string, number] = ['a', 1];const y: readonly [string, number] = ['a', 1];any
يمثّل نوع البيانات any حرفيًا «أي» قيمة، وهو النوع الافتراضي عندما يتعذر على TypeScript استدلال النوع أو عندما لا يكون محددًا.
عند استخدام any، يتخطى مصرّف TypeScript التحقق من الأنواع، ولذلك لا توجد سلامة للأنواع عند استخدام any. وبوجه عام، لا تستخدم any لإسكات المصرّف عند حدوث خطأ؛ بل ركّز بدلًا من ذلك على إصلاح الخطأ، لأن استخدام any يجعل من الممكن خرق العقود وفقدان فوائد الإكمال التلقائي في TypeScript.
قد يكون النوع any مفيدًا أثناء الانتقال التدريجي من JavaScript إلى TypeScript، إذ يمكنه إسكات المصرّف.
للمشروعات الجديدة، استخدم إعداد TypeScript noImplicitAny، الذي يمكّن TypeScript من إصدار أخطاء في المواضع التي يُستخدم فيها any أو يُستدل عليه.
عادةً ما يكون النوع any مصدرًا للأخطاء التي يمكنها إخفاء مشكلات حقيقية في أنواعك. تجنّب استخدامه قدر الإمكان.