new () => T توقيعات الإنشاء

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

new () => T توقيعات الإنشاء

يصف توقيع الإنشاء new (name: string) => T «أن هذه القيمة يمكن إنشاء T منها بـ new». تحتاجه عند تمرير الفئات نفسها (لا النسخ) كمعاملات — فدوال المصنع وحقن التبعيات وأنظمة الإضافات كلها تعتمد عليه لتجريد «القدرة على إنشاء الأشياء».

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

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

📝 الصيغة

class Player {
  constructor(public name: string, public hp = 100) {}
}

type PlayerCtor = new (name: string, hp?: number) => Player;

function spawn(Ctor: PlayerCtor, name: string, hp?: number): Player {
  return new Ctor(name, hp);
}

⚙️ المعاملات

newبادئة توقيع الإنشاء: تعني أن هذا التوقيع يُستدعى بـ new لا باستدعاء عادي
(name: string, hp?: number)معاملات الإنشاء: تتطابق موضعيًا مع معاملات مُنشئ الفئة
=> Playerنوع ناتج الإنشاء: نوع نتيجة تعبير new

القيمة المُعادة:نوع نتيجة تعبير new، أي النوع الواقع على يمين => في توقيع الإنشاء؛ وعادةً تمرره دوال المصنع كما هي كنوع إرجاع لها.

▶ مثال

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

الناتج:

Ada hp=100, Ben hp=80

(مخرجات التشغيل بعد التحويل؛ تمرير فئة لا تتطابق معاملات مُنشئها مع spawn سيعطي خطأ ترجمة)

💡 نقاط مهمة

ℹ️ معلومة الفئة نفسها هي «القيمة» لتوقيع إنشائها: ما يُمرر إلى spawn هو مرجع فئة Player، ويحدث new داخل المصنع — وهذا هو التعبير النوعي لمبدأ «الفئات مواطن من الدرجة الأولى».
💡 تلميح المصنع العام new (...args: any[]) => T هو أصغر شكل لحقن التبعيات: مرر أي فئة واحصل على نسخة T؛ وعند أهمية معاملات المُنشئ الدقيقة استخدم InstanceType<typeof C>.
⚠️ تنبيه الفئات المجردة لا تحقق توقيعات الإنشاء المحددة (لا يمكن إنشاؤها بـ new مباشرةً)؛ ولوصف «الفئة أو فئاتها الفرعية» استخدم توقيع الإنشاء المجرد abstract new (...) => T.
المزيد من الحالات قادم قريبًا.

📚 دروس ذات صلة

❓ أسئلة شائعة

س ما الفرق بين توقيع الإنشاء و InstanceType<typeof Player>؟
ج typeof Player هو نوع «الفئة نفسها» ويحمل الأعضاء الساكنة ومعاملات المُنشئ الدقيقة؛ بينما new (...) => T يعد فقط «بإمكان الإنشاء إلى T» وهو أكثر تجريدًا. للدقة استخدم الأول، وللمصانع العامة استخدم الثاني.
س متى يكون توقيع الإنشاء ضروريًا؟
ج كلما مُررت «فئة» كقيمة إلى دالة: spawn(PlayerCtor, name)، أو تسجيل new StorageClass() في الحاوية، أو تحميل new Plugin() في نظام الإضافات. فالواجهات العادية تصف النسخ ولا تصف الفئة نفسها.
س كيف تُكتب مصنع عام يجمع بين العمومية وأمان النوع؟
ج function create<T>(Ctor: new (...args: any[]) => T, ...args: any[]): T { return new Ctor(...args); } — المعاملات الواسعة تشتري العمومية، وتظل قيمة الإرجاع T دقيقة.
Web-Tutorial.com

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

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

100%