...rest: T[] المعاملات الباقية

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

...rest: T[] المعاملات الباقية

تجمع المعاملات الباقية باستخدام ...اسم كل المعاملات المتبقية في مصفوفة حقيقية (...scores: number[])، فتتيح للدالة قبول أي عدد من المعاملات من النوع نفسه — وهي البديل الآمن نوعيًا لكائن arguments.

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

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

📝 الصيغة

function average(...scores: number[]): number {
  if (scores.length === 0) return 0;
  return scores.reduce((sum, s) => sum + s, 0) / scores.length;
}

// معاملات موضعية + رست: يجب أن يكون معامل الرست هو الأخير
function logRequest(method: string, ...fields: string[]): void;

⚙️ المعاملات

...scores: number[]معامل باقٍ: تُجمع كل المعاملات الزائدة في number[]؛ ويجب أن يكون آخر عنصر في القائمة

القيمة المُعادة:كما في الدوال العادية: تعليق صريح أو استدلال من جسم الدالة؛ فالمعامل الباقي بذاته لا يغيّر قواعد نوع الإرجاع.

▶ مثال

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

الناتج:

84.3
97.5
0

(مخرجات التشغيل بعد التحويل؛ average("90") ستعطي خطأ ترجمة — عناصر المعامل الباقي يجب أن تكون number)

💡 نقاط مهمة

ℹ️ معلومة المعاملات الباقية مصفوفة حقيقية في وقت التشغيل، فاستخدم map/filter/reduce بحرية؛ وهذا أكثر أمانًا بكثير من كائن arguments القديم (شبيه بالمصفوفة وغير مُعلَّم النوع).
⚠️ تنبيه ...args: any[] يفقد جميع معلومات أنواع العناصر؛ يُفضَّل كتابة نوع عنصر محدد، أو استخدام مجموعة عامة ...args: T للحفاظ على نوع كل موضع.
💡 تلميح يمكن لأنواع الـ tuple «تثبيت» شكل المعاملات الباقية: ...args: [name: string, retries: number] يعني أن المعامل الأول يجب أن يكون string والثاني number.
المزيد من الحالات قادم قريبًا.

📚 دروس ذات صلة

❓ أسئلة شائعة

س ما الفرق بين ...scores: number[] و scores: number[]؟
ج الأخير هو «معامل مصفوفة واحد» يتطلب الاستدعاء average([90, 85])؛ والأول يقبل «أي عدد من معاملات الأرقام» مباشرةً average(90, 85). وإذا كانت المصفوفة جاهزة لدى المستدعي فالمعامل المصفوفة العادي أنسب.
س هل يمكن وضع المعامل الباقي في وسط القائمة؟
ج لا. يجب أن يكون في الأخير — فتعريف «الباقي» هو جمع كل المعاملات التي تليه، ووضعه في الوسط يعطي خطأ ترجمة مباشرة.
س ما فائدة المعاملات الباقية العامة؟
ج <T extends any[]>(...args: T) تجمع المعاملات كنوع tuple يُحفظ فيه نوع كل موضع، وهي الحيلة الأساسية لكتابة أدوات wrap/decorate التي تمرر المعاملات كما هي.
Web-Tutorial.com

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

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

100%