0Pricing
TypeScript Academy · درس

الواجهة أم النوع: متى تستخدمون كلًّا منهما

اختاروا بين interface وtype وفقًا للسيناريو

الواجهة أم النوع: متى تستخدمون كلًّا منهما درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 4 دروس في المجموع.

مرحبًا

تصف كل من `interface` و`type` هياكل الكائنات. وهما متشابهان، لكن بينهما اختلافات مهمة. يساعدك هذا الدرس على اختيار الأنسب منهما.

أوجه التشابه

يمكن لكليهما وصف هياكل الكائنات، وتضمين خصائص اختيارية وخصائص للقراءة فقط، واستخدامهما كأنواع لمعاملات الدوال، ودعم الأنواع العامة.
interface A { x: number; }
type B = { x: number; };
// Both describe the same shape

الاختلاف الأساسي: دمج التصريحات

تدعم الواجهات دمج التصريحات، أما الأسماء المستعارة للأنواع فلا تدعمه؛ إذ تؤدي إعادة التصريح عن اسم مستعار لنوع إلى حدوث خطأ.
interface Config { host: string; }
interface Config { port: number; } // OK — merged

type Settings = { host: string; };
// type Settings = { port: number; }; // Error

الاختلاف الأساسي: الاتحاد والتقاطع

يمكن للأسماء المستعارة للأنواع وصف الاتحادات والتقاطعات والأنواع البدائية والصفوف. أما الواجهات فلا يمكنها وصف سوى هياكل الكائنات.
type ID = string | number;        // union — only with type
type Nullable<T> = T | null;       // union — only with type
type Point = [number, number];     // tuple — only with type

الاختلاف الأساسي: الخصائص المحسوبة

يمكن للأسماء المستعارة للأنواع استخدام الأنواع المعيَّنة والشرطية لحساب بنيتها. ولا يمكن للواجهات استخدام هذه الأنواع مباشرةً.
type ReadonlyUser = Readonly<{ name: string; age: number }>; // mapped type
type Keys = keyof User; // only with type

استخدام interface لعقود الأصناف

تتكامل الواجهات طبيعيًا مع الأصناف عبر `implements`. ويضمن ذلك أن يوفر الصنف خصائص وأساليب معينة.
interface Repository<T> {
  findById(id: number): T | null;
  save(item: T): void;
}
class UserRepo implements Repository<User> { /* ... */ }

الأداء: الواجهات مقابل الأنواع

يخزّن TypeScript داخليًا نتائج التحقق من هياكل الواجهات بكفاءة أعلى من تعبيرات الأسماء المستعارة للأنواع المعقدة. لذلك فضّل استخدام الواجهة مع الأنواع الكبيرة للكائنات.

اختلاف رسائل الخطأ

عند حدوث عدم تطابق في الأنواع، تعرض الأخطاء غالبًا اسم الواجهة عند استخدام الواجهات، بينما تعرض البنية الموسَّعة عند استخدام الأسماء المستعارة للأنواع. وتكون أخطاء الواجهات عادةً أسهل قراءة.

توصية TypeScript الرسمية

يوصي فريق TypeScript باستخدام `interface` إلى أن تحتاج إلى ميزات تتطلب `type`. وهذه أفضل ممارسة موثّقة لديهم.

اتساق الفريق هو الأهم

تختار فرق كثيرة أحدهما وتستخدمه في كل مكان للحفاظ على الاتساق. وقد يكون استخدام كليهما بحرية في المشروع نفسه مربكًا. ويساعد دليل الأسلوب على تجنّب ذلك.

جدول ملخّص لاتخاذ القرار

استخدم interface مع: الكائنات، والأصناف، وتوسيع المكتبات. واستخدم type مع: الاتحادات، والتقاطعات، والصفوف، والأنواع البدائية، والأنواع المعيَّنة، والأنواع الشرطية.
// interface
interface User { name: string; age: number; }

// type (union)
type ID = string | number;

// type (tuple)
type Coord = [number, number];

تحقّق سريع

ما البنية المطلوبة لإنشاء نوع اتحاد مثل `string | number`؟

مراجعة

استخدم interface لهياكل الكائنات، وعقود الأصناف، وتوسيع المكتبات. واستخدم type للاتحادات، والتقاطعات، والصفوف، والأنواع المحسوبة. وعند التردد، تكون interface توصية فريق TypeScript لهياكل الكائنات.

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

هل درس «الواجهة أم النوع: متى تستخدمون كلًّا منهما» مجاني؟

نعم — نص درس «الواجهة أم النوع: متى تستخدمون كلًّا منهما» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 4 دروس في المجموع.

ماذا ستتعلم في «الواجهة أم النوع: متى تستخدمون كلًّا منهما»؟

اختاروا بين interface وtype وفقًا للسيناريو تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟

لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «الواجهة أم النوع: متى تستخدمون كلًّا منهما»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟

نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تعريف أشكال الكائنات باستخدام الواجهات
  2. الأسماء المستعارة للأنواع المعقدة
  3. تمديد الواجهات ودمجها
  4. الواجهة أم النوع: متى تستخدمون كلًّا منهما
← العودة إلى TypeScript Academy