implements تحقيق الفئات للواجهات والفئة كنوع

آخر تحديث: 2026-10-22

implements تحقيق الفئات للواجهات والفئة كنوع

يجعل implements الفئة «تطالب» بواجهة: يتحقق المترجم بندًا بندًا من أن الفئة توفر كل الأعضاء التي تطلبها الواجهة وأنواعها متوافقة. تصف الواجهة «ما الذي يمكن فعله»، وتجيب الفئة «كيف يُفعل» — ويمكن للواجهة الواحدة أن تحققها تنفيذات مختلفة تمامًا.

المجموعةالدوال والأصناف
النوعبناء الجملة
الوضع الصارمغير مطلوب

ℹ️ معلومة يحوّل المحرر لغة TypeScript إلى JavaScript ثم يشغّلها (بدون فحص أنواع)؛ راجع ناتج كل مثال لنتيجة فحص الأنواع.

📝 الصيغة

interface Storage {
  save(key: string, value: string): void;
  load(key: string): string | null;
}

class MemoryStorage implements Storage {
  private map = new Map<string, string>();
  save(key: string, value: string): void { this.map.set(key, value); }
  load(key: string): string | null { return this.map.get(key) ?? null; }
}

⚙️ المعاملات

implementsالمطالبة بالواجهات: يجوز تحقيق عدة واجهات دفعة واحدة (implements A, B)؛ واتجاه الفحص هو «الفئة تحقق الواجهة»
extends + implementsيجوز الجمع بينهما: class Foo extends Base implements Storage — وراثة التنفيذ مع تحمّل العقد

القيمة المُعادة:يجب أن تتطابق أنواع إرجاع الطرق مع توقيعات الواجهة أو تكون أضيق منها (تغاير)، بينما تتطلب المعاملات أن تكون أوسع (تباين)، وإلا كان خطأ ترجمة.

▶ مثال

عدّل الكود أدناه واضغط «جرّب» لرؤية نتيجة التحويل:

الناتج:

dark null

(مخرجات التشغيل بعد التحويل؛ حذف طريقة load أو تغيير نوع إرجاعها إلى string سيعطي خطأ ترجمة — فـ implements يفحص بندًا بندًا)

💡 نقاط مهمة

ℹ️ معلومة implements فحص خاص بوقت الترجمة بلا أي تأثير في بنية وقت التشغيل؛ فبعد التحويل تختفي الواجهة وتصبح الفئة فئة عادية.
⚠️ تنبيه الواجهات تصف الأعضاء العلنيين فقط — فالحقول الخاصة private لا تدخل في فحص implements؛ وعلى النقيض، كل عضو مكتوب في الواجهة يجب أن يوجد في الفئة كاملًا، ونقص واحد يعني خطأ.
💡 تلميح أسلوب تطبيق انعكاس التبعية عمليًا: يعتمد كود الأعمال على واجهة Storage، وتحقن الاختبارات MemoryStorage والإنتاج LocalStorage — دون تغيير سطر واحد في كود المستدعي.
المزيد من الحالات قادم قريبًا.

📚 دروس ذات صلة

❓ أسئلة شائعة

س ما الفرق بين implements و extends؟
ج extends يرث التنفيذ (يأخذ الكود)، بينما implements يعد بالشكل (يتحمل العقد). يمكن للفئة أن ترث extends فئة أم واحدة فقط، لكنها تحقق implements عدة واجهات.
س هل يمكن إسناد فئة إلى نوع واجهة دون implements؟
ج نعم — فـ TS نظام أنواع بنيوي، يكفي تطابق الشكل. وقيمة implements هي التصريح الصريح بالنية + جعل «الواجهة تغيّرت والفئة لم تلحق بها» خطأً يظهر عند تعريف الفئة بدل الانفجار عند مواضع الإسناد.
س هل يمكن تعريف قيود المُنشئ في الواجهة؟
ج نعم، بكتابة توقيع new: interface Ctor<T> { new (...args: any[]): T } — وهو شائع لأنواع تسجيل المصانع/الحاويات.
Web-Tutorial.com

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

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

100%