جاري التحميل...
جاري التحميل...
تعريف هياكل البيانات
تُعرّف الواجهة شكل الكائن. تُحدد أي خصائص يجب أن يكون لدى الكائن وأنواع هذه الخصائص.
interface Person {
name: string;
age: number;
email: string;
}
const person: Person = {
name: 'Ahmed',
age: 25,
email: 'ahmed@example.com'
};تدعم الواجهات الخصائص الاختيارية (?) والخصائص للقراءة فقط:
interface Config {
readonly apiUrl: string;
timeout?: number;
debug?: boolean;
}💡 نقاط رئيسية:
readonly = لا يمكن تغييره بعد الإنشاء. ? = الخاصية اختيارية.
يمكن للواجهات التوسع من واجهات أخرى لإعادة الاستخدام والبناء على الأنواع الموجودة:
interface Animal {
name: string;
sound: string;
}
interface Dog extends Animal {
breed: string;
bark(): void;
}أسماء الأنواع البديلة هي طريقة أخرى لإنشاء أنواع مخصصة. تعمل بشكل مشابه للواجهات لكنها أكثر مرونة:
type Point = {
x: number;
y: number;
};
type ID = string | number;
type Result = {
success: boolean;
data: any;
error?: string;
};💡 واجهة مقابل نوع:
استخدم interface للكائنات والكلاسات. استخدم type لأنواع الاتحاد والتقاطع وتعريفات الأنواع الأبسط.
تجمع أنواع التقاطع عدة أنواع في واحد:
type HasName = { name: string };
type HasAge = { age: number };
type Person = HasName & HasAge;
// يجب أن يحتوي Person على name و age معاًماذا يفعل المُعدّل readonly؟
ما الفرق بين interface و type؟
كيف تجمع نوعين في واحد؟
أنشئ واجهات لنظام مدونة: Post، User، Comment. استخدم extends للوراثة والخصائص الاختيارية وأنواع التقاطع.
الحل:
// Build a type system for a blog
interface Post {
id: string;
title: string;
content: string;
author: User;
tags: string[];
createdAt: Date;
}
interface User {
id: string;
name: string;
email: string;
}
interface Comment {
id: string;
postId: string;
author: User;
content: string;
}
// Use extends for inheritance
interface AdminUser extends User {
role: 'admin';
permissions: string[];
}
// Use intersection types
type PostWithComments = Post & {
comments: Comment[];
};مميزات الواجهة:
أسماء الأنواع البديلة:
ما الفرق بين interface و type؟
الإجابة:
كلاهما يعرّف أشكال البيانات. Interface قابل للتمديد، type أكثر مرونة.
متى نستخدم type بدلاً من interface؟
الإجابة:
لـ Union types و Intersection types و الأشكال المعقدة.
استخدم Partial<T>
لجعل جميع الخصائص اختيارية في object