كائنات TypeScript مبسطة للمبتدئين

تُعد الكائنات جزءًا أساسيًا من JavaScript وTypeScript. فهي تسمح لك بتجميع البيانات والوظائف ذات الصلة معًا، مما يوفر طريقة لنمذجة الكيانات في العالم الحقيقي في الكود الخاص بك. تعمل TypeScript على تعزيز كائنات JavaScript من خلال أمان النوع، مما يجعل الكود الخاص بك أكثر قابلية للتنبؤ وأسهل في الصيانة. سيعمل هذا الدليل على تبسيط مفهوم كائنات TypeScript للمبتدئين.

ما هو الكائن في TypeScript؟

object عبارة عن مجموعة من أزواج المفتاح والقيمة، حيث تكون المفاتيح عبارة عن سلاسل (أو رموز) ويمكن أن تكون القيم من أي نوع. في TypeScript، يمكنك تحديد شكل الكائن باستخدام الأنواع أو الواجهات، مما يضمن أن الكائن يتبع بنية معينة.

تعريف الكائنات البسيطة في TypeScript

لنبدأ بتعريف كائن بسيط في TypeScript. هذا مشابه لكيفية تعريف الكائنات في JavaScript ولكن مع ميزة إضافية تتمثل في سلامة النوع.

مثال على الكائن الأساسي

فيما يلي كيفية تعريف كائن بسيط في TypeScript:

const person: { name: string; age: number } = {
  name: "Alice",
  age: 25
};

console.log(person.name); // Output: Alice
console.log(person.age);  // Output: 25

في هذا المثال، يحتوي الكائن person على خاصيتين: name (من النوع string) وage (من النوع number). سيضمن TypeScript أن الكائن يلتزم بهذا الهيكل.

استخدام الواجهات لتحديد بنية الكائن

interface هي ميزة قوية في TypeScript تحدد شكل الكائن. توفر الواجهات طريقة لتحديد العقود داخل الكود الخاص بك، مما يضمن التزام الكائنات ببنية معينة.

تعريف الواجهة

فيما يلي كيفية استخدام واجهة لتحديد بنية الكائن:

interface Person {
  name: string;
  age: number;
}

const person: Person = {
  name: "Bob",
  age: 30
};

console.log(person.name); // Output: Bob
console.log(person.age);  // Output: 30

في هذا المثال، تحدد واجهة Person بنية كائن الشخص. يجب أن يلتزم المتغير person بهذه البنية، وإلا فسيقوم TypeScript بإلقاء خطأ.

الخصائص الاختيارية في الكائنات

يتيح لك TypeScript تعريف خصائص اختيارية في الكائنات باستخدام الرمز ?. يمكن حذف الخصائص الاختيارية عند إنشاء الكائنات، مما يوفر المرونة في كيفية تعريف هياكل الكائنات.

مثال مع خصائص اختيارية

فيما يلي مثال حيث تكون الخاصية phoneNumber اختيارية:

interface Employee {
  name: string;
  age: number;
  phoneNumber?: string; // Optional property
}

const employee1: Employee = {
  name: "John",
  age: 28
};

const employee2: Employee = {
  name: "Doe",
  age: 32,
  phoneNumber: "123-456-7890"
};

console.log(employee1.phoneNumber); // Output: undefined
console.log(employee2.phoneNumber); // Output: 123-456-7890

في هذا المثال، لا يحتوي employee1 على خاصية phoneNumber، بينما يحتوي employee2 على هذه الخاصية. وكلاهما صالح وفقًا لواجهة Employee.

خصائص القراءة فقط في الكائنات

يتيح لك TypeScript جعل الخصائص للقراءة فقط، مما يمنع تعديلها بعد إنشاء الكائن. وهذا مفيد لإنشاء كائنات غير قابلة للتغيير.

مثال مع خصائص القراءة فقط

فيما يلي كيفية تعريف خصائص القراءة فقط:

interface Car {
  readonly brand: string;
  model: string;
}

const car: Car = {
  brand: "Toyota",
  model: "Camry"
};

// car.brand = "Honda"; // Error: Cannot assign to 'brand' because it is a read-only property

car.model = "Corolla"; // Valid
console.log(car.model); // Output: Corolla

في هذا المثال، تم وضع علامة على الخاصية brand على أنها readonly. ستؤدي أي محاولة لتعديلها إلى حدوث خطأ في وقت التجميع.

الكائنات المتداخلة في TypeScript

يمكن أن تكون كائنات TypeScript متداخلة، مما يعني أن الكائن يمكن أن يحتوي على كائن آخر كخاصية. وهذا أمر شائع في هياكل البيانات المعقدة.

مثال على الكائنات المتداخلة

فيما يلي مثال لكائن متداخل:

interface Address {
  street: string;
  city: string;
  zipCode: string;
}

interface User {
  name: string;
  age: number;
  address: Address; // Nested object
}

const user: User = {
  name: "Emily",
  age: 27,
  address: {
    street: "123 Main St",
    city: "New York",
    zipCode: "10001"
  }
};

console.log(user.address.city); // Output: New York

في هذا المثال، تحتوي واجهة User على كائن Address متداخل. يتبع الكائن user هذا الهيكل، مما يسمح بالوصول إلى الخصائص المتداخلة.

خاتمة

تعتبر الكائنات في TypeScript أكثر قوة ومرونة من كائنات JavaScript العادية بسبب تعريفات النوع والخصائص الاختيارية والخصائص للقراءة فقط والهياكل المتداخلة. من خلال تعريف الكائنات باستخدام الواجهات، يمكنك إنشاء أكواد أكثر قوة وخالية من الأخطاء. ابدأ في استخدام كائنات TypeScript في مشاريعك للاستفادة من القوة الكاملة لسلامة النوع والبيانات المنظمة.