overloads التحميل الزائد للدوال
آخر تحديث: 2026-10-22
overloads التحميل الزائد للدوال
تمنح تعريفات التحميل الزائد الدالةَ الواحدة «أوراق توقيع» متعددة: يحصل المستدعي على نوع إرجاع دقيق وفق شكل المعاملات، بينما يُكتب التنفيذ مرة واحدة. تطابق TS التوقيعات حسب ترتيب التصريح واحدًا تلو الآخر، ولا يخطئ إلا إذا لم يطابق أيٌّ منها.
| المجموعة | الدوال والأصناف |
|---|---|
| النوع | بناء الجملة |
| الوضع الصارم | غير مطلوب |
ℹ️ معلومة يحوّل المحرر لغة TypeScript إلى JavaScript ثم يشغّلها (بدون فحص أنواع)؛ راجع ناتج كل مثال لنتيجة فحص الأنواع.
📝 الصيغة
function format(value: number): string; // رقم → مبلغ
function format(value: Date): string; // تاريخ → نص تاريخ
function format(value: number | Date): string { // توقيع التنفيذ غير مرئي للاستدعاء
return value instanceof Date
? value.toISOString().slice(0, 10)
: `¥${value.toFixed(2)}`;
}
⚙️ المعاملات
| f(...): T; | تعريفات بلا جسم دالة تُكتب متتالية؛ ويتطابق بها المترجم بالترتيب |
|---|---|
| f(...) { } | التوقيع الوحيد الذي يحمل جسم الدالة؛ ويجب أن تكون معاملاته متوافقة مع كل التحميلات الزائدة، لكنه غير مرئي للمستدعي |
القيمة المُعادة:يحدده توقيع التحميل الزائد المطابق — إذ يمكن لكل توقيع التصريح بنوع إرجاع مختلف، فيحصل المستدعي على النوع الدقيق الموافق لشكل معاملاته.
▶ مثال
عدّل الكود أدناه واضغط «جرّب» لرؤية نتيجة التحويل:
الناتج:
¥42.00
2026-01-15
(مخرجات التشغيل بعد التحويل؛ تتلاشى توقيعات التحميل الزائد بعد التحويل — لا تبقى في وقت التشغيل سوى دالة التنفيذ بلا أي كلفة تفريع)
💡 نقاط مهمة
ℹ️ معلومة في ناتج الترجمة لا يبقى سوى دالة التنفيذ — فتوقيعات التحميل الزائد صيغة خاصة بوقت الترجمة بلا أي أثر في وقت التشغيل.
⚠️ تنبيه توقيع التنفيذ غير مرئي للمستدعي: يجب أن تغطي معاملاته أشكال كل التحميلات الزائدة، وإلا أخطأت الاستدعاءات الصالحة عند توقيع التنفيذ.
💡 تلميح تُطابق التحميلات الزائدة من أعلى إلى أسفل حسب ترتيب التصريح: ضع التوقيعات الأكثر تحديدًا أولًا والواسعة أخيرًا، وإلا سرقت التوقيعات الواسعة الاستدعاءات المخصصة للتوقيعات المحددة.
🏷️ الدوال والأصناف ذات صلة
💡 حالات ذات صلة
المزيد من الحالات قادم قريبًا.
📚 دروس ذات صلة
❓ أسئلة شائعة
س كيف تختار بين التحميل الزائد ومعامل الاتحاد؟
ج استخدم التحميل الزائد عندما يؤثر نوع المعامل في نوع القيمة المُعادة (وصفة دقيقة لكل حالة)؛ ومعامل الاتحاد مع التضييق عندما يؤثر فقط في المعالجة الداخلية ويكون الإرجاع واحدًا — بكمية كود أقل.
س لماذا يظهر الخطأ «لا يوجد تحميل زائد يطابق هذا الاستدعاء»؟
ج تحقق من أمرين: هل أنواع المعاملات تقع فعلًا ضمن أحد التحميلات؛ وهل ترتيب التوقيعات منطقي (التوقيع الواسع في المقدمة «يسدّ الطريق» أمام التوقيعات المحددة اللاحقة).
س هل يمكن للدوال السهمية أن تحمل تحميلًا زائدًا؟
ج لا. التحميل الزائد لا يدعم إلا صيغة التصريح function؛ وفي حالة المتغيرات استخدم صيغة نوع الكائن type Overloaded = { (x: string): A; (x: number): B }.