...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 التي تمرر المعاملات كما هي.