TypeScript: الأنواع الأساسية في TypeScript

آخر تحديث: 2026-08-26

يبدأ نظام الأنواع في TypeScript بسبعة أنواع أساسية — إذا أتقنت هذه الأنواع، فستكون قد أتقنت «الأبجدية» الخاصة بتعليقات الأنواع.

1. سبعة أنواع أساسية

يرث TypeScript الأنواع السبعة الأساسية من JavaScript ويوفر صيغة لتعليق الأنواع لكل نوع:

النوع الوصف مثال على القيمة
string سلسلة "hello"، 'world'، `template`
number الأعداد (الأعداد الصحيحة والأعداد العشرية) 42، 3.14، 0xFF
boolean قيمة منطقية true، false
null قيمة فارغة null
undefined غير محدد undefined
symbol المعرّف الفريد Symbol("id")
bigint عدد صحيح كبير 100n، BigInt(9007199254740991)

(1) سلسلة

يمكن كتابة السلاسل باستخدام علامات الاقتباس المفردة أو المزدوجة أو علامات الاقتباس المائلة العكسية (سلاسل القوالب):

TYPESCRIPT
let firstName: string = "Charlie";
let lastName: string = 'Wang';
let greeting: string = `Hello, ${firstName} ${lastName}`;

تدعم سلاسل القوالب (العلامات المائلة العكسية) المتغيرات والتعبيرات المضمنة؛ وقد أُدرجت هذه الصيغة في ES6، وهي مدعومة بالكامل في TypeScript.

(2) الرقم

مثل لغة JavaScript، لا تميز لغة TypeScript بين الأعداد الصحيحة والأعداد العائمة — فكلاهما من النوع number:

TYPESCRIPT
let age: number = 25;         // Integer
let price: number = 9.99;     // Decimals
let hex: number = 0xFF;       // Hexadecimal
let binary: number = 0b1010;  // Binary
let octal: number = 0o744;    // Octal
💡 نصيحة: إذا كانت حساباتك تتضمن أعدادًا صحيحة كبيرة جدًّا تتجاوز Number.MAX_SAFE_INTEGER (2^53 - 1)، فيجب عليك استخدام bigint بدلاً من number؛ وإلا فستفقد الدقة.

(3) منطقية

لا يوجد سوى قيمتين: true وfalse. وتُستخدم هاتان القيمتان عادةً في عمليات الفحص الشرطي وكعلامات تبديل:

TYPESCRIPT
let isActive: boolean = true;
let hasPermission: boolean = false;

▶ مثال: تعليقات الأنواع الأولية

TYPESCRIPT
// Defining Different Types of Variables
let title: string = "TypeScript Getting Started";
let version: number = 5.3;
let isPublished: boolean = true;

console.log("Courses:" + title);
console.log("Version:" + version);
console.log("Published:" + isPublished);
▶ جرّب الكود

الناتج:

TEXT 📖 للعرض فقط
Courses:TypeScript Getting Started
Version:5.3
Published:true


2. فارغ و غير معرّف

في TypeScript، يُعتبر كل من null وundefined قيمتين وأنواعًا في آن واحد. وقد يبدو الفرق بينهما طفيفًا، لكنه مهم في نظام الأنواع.

(1) الاختلافات في المعنى

النوع المعنى متى تظهر
undefined "لم يتم تعيينها بعد" تم إعلان المتغير ولكن لم يتم تهيئته؛ الدالة لا تحتوي على قيمة إرجاع
null "ترك فارغًا عمدًا" تم تعيينه من قِبل المطور للإشارة إلى "لا توجد قيمة هنا"

(2) تعليقات الأنواع

TYPESCRIPT
let notAssigned: undefined = undefined;
let emptyValue: null = null;
⚠️ ملاحظة: بشكل افتراضي، يمكن تعيين null وundefined إلى متغيرات من أي نوع (على سبيل المثال، let name: string = null صالحة). ومع ذلك، بمجرد تمكين strictNullChecks، لا يمكن تعيينهما إلا إلى أنواع من نوع null/undefined أو أنواع الاتحاد. يُنصح بشدة بتمكين الفحص الصارم للقيم الفارغة.

(3) تأثير strictNullChecks

TYPESCRIPT
// strictNullChecks: false(Default Relaxed Mode)
let name: string = null;         // ✅ No errors,But at runtime name.toUpperCase() It will crash

// strictNullChecks: true(Strict Mode,Recommendations)
let name2: string = null;        // ❌ Error:You cannot null Assign to string
let name3: string | null = null; // ✅ Correct:An explicit declaration might be null
📌 نقطة أساسية: strict: true تشمل strictNullChecks: true. في الوضع الصارم، يجب الإعلان صراحةً عن أي قيمة يمكن أن تكون null أو undefined؛ وهذا يمنع 90% من أخطاء وقت التشغيل من نوع «غير معرّف is not a دالة».



3. النوع symbol

symbol هو نوع بدائي تم إدخاله في ES6 ويُستخدم لإنشاء معرّفات فريدة على المستوى العام. كل استدعاء لـ Symbol() يُنتج قيمة فريدة:

TYPESCRIPT
let id1: symbol = Symbol("id");
let id2: symbol = Symbol("id");

console.log(id1 === id2);  // false —— Even if the descriptions are the same,Each symbol They are all unique.

▶ مثال: استخدام رمز كمفتاح فريد لكائن

TYPESCRIPT
let uniqueKey: symbol = Symbol("secret");

let user = {
  name: "Diana",
  age: 20
};

// Use symbol as a property key,Does not conflict with other attributes
user[uniqueKey] = "Hide Data";

console.log(user.name);        // Normal Access
console.log(user[uniqueKey]);  // Visit symbol Key value
▶ جرّب الكود

الناتج:

TEXT 📖 للعرض فقط
Diana
Hide Data
💡 نصيحة: لا تُستخدم الرموز كثيرًا في عمليات التطوير اليومية؛ فهي تظهر بشكل أساسي في السيناريوهات المتقدمة (مثل بروتوكول المكرر Symbol.iterator وعمليات تنفيذ الأطر الداخلية). وبالنسبة للمبتدئين، يكفي أن يفهموا أن «Symbol() تُنشئ قيمة فريدة في كل مرة يتم استدعاؤها».



4. النوع bigint

bigint هو نوع تم إدخاله في ES2020 لتمثيل الأعداد الصحيحة الكبيرة التي تتجاوز النطاق الآمن لـ number. أي عدد يتبعه n يُعتبر bigint:

TYPESCRIPT
let big1: bigint = 100n;                        // Literal Notation
let big2: bigint = BigInt(9007199254740991);     // Function Syntax

// number Upper Limit for Secure Integers
let maxSafe: number = Number.MAX_SAFE_INTEGER;  // 9007199254740991
let overflow: number = 9007199254740992;        // Outside the safety range,Loss of Accuracy!

// bigint No loss of precision
let safe: bigint = 9007199254740992n;           // Precise representation
🔥 خطأ شائع: لا يمكن استخدام bigint وnumber معًا في الحسابات — سيؤدي استخدام 100n + 50 إلى حدوث خطأ. يجب عليك أولاً توحيد النوع إلى Number(100n) + 50 أو 100n + BigInt(50).

▶ مثال: مقارنة دقة عدد «bigint»

TYPESCRIPT
// number Accuracy is lost when the safe range is exceeded
let a: number = 9007199254740992;
let b: number = 9007199254740993;
console.log(a === b);  // true!Two different numbers are actually equal

// bigint Precise representation
let c: bigint = 9007199254740992n;
let d: bigint = 9007199254740993n;
console.log(c === d);  // false —— Distinguish Correctly
▶ جرّب الكود

الناتج:

TEXT 📖 للعرض فقط
true
false


5. حذف تعليقات الأنواع وأفضل الممارسات

(1) متى يكون من الضروري تضمين تعليق النوع؟

السيناريو هل هو مطلوب؟ السبب
المتغيرات التي لا تحتوي على قيم أولية ✅ إلزامي وإلا، فلن يتمكن TypeScript من استنتاج النوع
معلمة الدالة ✅ إلزامية لا توجد قيمة أولية لهذه المعلمة لأغراض الاستدلال
قيمة إرجاع الدالة ⚠️ موصى به يمكن لـ TypeScript استنتاج ذلك، لكن التوضيح الصريح يوفر مزيدًا من الوضوح
المتغير له قيمة أولية ❌ اختياري يقوم TypeScript باستنتاج النوع بناءً على القيمة الأولية

(2) أفضل الممارسات

TYPESCRIPT
// ✅ Recommendations:Omit the type annotation when a variable has an initial value(Type inference is sufficient)
let name = "Charlie";
let age = 20;

// ✅ Recommendations:Explicitly Labeling Function Parameters and Return Values
function greet(name: string): string {
  return "Hello, " + name;
}

// ✅ Recommendations:Explicitly label when there is no initial value
let userId: number;
let isActive: boolean;

// ❌ Not recommended:Why include annotations when there are initial values?(Redundancy)
let name2: string = "Charlie";  // Superfluous——TypeScript It has already been deduced.


❓ أسئلة شائعة

س هل توجد في TypeScript أنواع «float» أو «double»؟
ج لا. تمامًا مثل JavaScript، لا يحتوي TypeScript إلا على نوع واحد للأرقام، والذي يشمل كلاً من الأعداد الصحيحة والأعداد العائمة. جميع الأرقام في JavaScript هي أعداد عائمة ذات دقة مزدوجة و64 بت (IEEE 754)، لذا فإن 1 و1.0 متطابقان تمامًا من حيث النوع.
س ما الفرق العملي بين null وundefined؟ ومتى ينبغي استخدام كل منهما؟
ج تشير undefined إلى «لم يتم تعيينها بعد» (حالة يُنشئها النظام تلقائيًا)، بينما تشير null إلى «فارغة عمدًا» (قيمة يحددها المطور صراحةً). في عملية التطوير الفعلية، يُنصح باستخدام null للإشارة إلى «لا توجد قيمة» — لأن undefined قد ينتج عن نسيان تعيين قيمة، في حين أن null يمثل اختيارًا متعمدًا.
س هل يُستخدم النوع bigint بشكل شائع؟
ج ليس حقًّا. ففي الغالبية العظمى من الحالات، يكفي استخدام النوع number (الذي يوفر نطاقًا آمنًا للأعداد الصحيحة يصل إلى 2^53-1 ≈ 900 تريليون). يُستخدم bigint بشكل أساسي في سيناريوهات مثل خوارزميات التشفير، وحسابات الأعداد الكبيرة، وحقول bigint في قواعد البيانات. يكفي أن يدرك المبتدئون وجوده؛ ويمكنهم التعمق في الموضوع عندما يحتاجون فعليًا إلى استخدامه.
س هل يؤثر استخدام عدد كبير جدًا من تعليقات الأنواع على الأداء؟
ج لا على الإطلاق. تعليقات الأنواع موجودة فقط في مرحلة الترجمة؛ حيث تُحذف جميع معلومات الأنواع من كود جافا سكريبت المُترجم، لذا لا توجد أي أعباء إضافية في مرحلة التشغيل. تمامًا كما أن التعليقات لا تبطئ البرنامج.

📖 ملخص

📝 تمارين

  1. المسألة الأساسية (الصعوبة ⭐): قم بتعريف خمسة متغيرات تتوافق مع خمسة أنواع شائعة (سلسلة، عدد، منطقية، فارغ، غير معرّف)، وقم بتعيين القيم المناسبة لها، واستخدم console.log لعرضها واحدة تلو الأخرى.
  2. مشكلة متقدمة (درجة الصعوبة ⭐⭐): اكتب دالة formatPrice(price: number, currency: string): string تقوم بتنسيق سعر رقمي ليصبح سلسلة نصية تحتوي على رمز العملة. على سبيل المثال، تُرجع الدالة formatPrice(99.5, "¥") القيمة "¥99.5".
  3. مشكلة التحدي (الصعوبة ⭐⭐⭐): تحقق من دقة number — اكتب كودًا لمقارنة ما إذا كان 0.1 + 0.2 و0.3 متساويين، وشرح النتيجة. ثم استخدم bigint لحساب مجموع عددين صحيحين كبيرين يتجاوزان Number.MAX_SAFE_INTEGER، وتأكد من أن bigint لا يفقد دقته.
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%