arg?: T المعاملات الاختيارية والمعاملات ذات القيم الافتراضية
آخر تحديث: 2026-10-22
arg?: T المعاملات الاختيارية والمعاملات ذات القيم الافتراضية
تُعلّم العلامة ? المعاملَ الاختياري (يجوز عدم تمريره)، وتمنح العلامة = المعاملَ قيمةً افتراضية (تُستخدم تلقائيًا عند الإغفال). كلاهما يتيح للمستدعي تمرير المعلومات الضرورية فقط، وهما الأداة الأولى لبناء تواقيع دوال ودّية.
| المجموعة | الدوال والأصناف |
|---|---|
| النوع | بناء الجملة |
| الوضع الصارم | غير مطلوب |
ℹ️ معلومة يحوّل المحرر لغة TypeScript إلى JavaScript ثم يشغّلها (بدون فحص أنواع)؛ راجع ناتج كل مثال لنتيجة فحص الأنواع.
📝 الصيغة
function buildLabel(orderId: number, prefix = "ORD", note?: string): string {
const base = `${prefix}-${String(orderId).padStart(5, "0")}`;
return note ? `${base} (${note})` : base;
}
⚙️ المعاملات
| prefix = "ORD" | معامل افتراضي: يُستخدم عند الإغفال، ويُستنتج نوعه من القيمة الافتراضية |
|---|---|
| note?: string | معامل اختياري: يكون undefined عند عدم تمريره، لذا نوعه الفعلي هو string | undefined ويلزم تضييقه قبل الاستخدام |
القيمة المُعادة:يُعلَّق نوع الإرجاع كالمعتاد أو يُستنتج؛ وانتبه: إذا شارك معامل اختياري في الحساب فيجب أن يغطي النوع فرع undefined.
▶ مثال
عدّل الكود أدناه واضغط «جرّب» لرؤية نتيجة التحويل:
الناتج:
ORD-00042
VIP-00042
ORD-00042 (عاجل)
(مخرجات التشغيل بعد التحويل؛ عند عدم تمرير note يكون undefined، ولن تظهر كلمة "undefined" في التسمية أبدًا)
💡 نقاط مهمة
ℹ️ معلومة يجب أن تأتي المعاملات الاختيارية بعد الإلزامية؛ ويمكن وضع المعاملات الافتراضية في أي موضع، لكن إذا وُضعت في الوسط فلتخطيها يجب تمرير undefined صراحةً.
⚠️ تنبيه النوع الحقيقي لـ note?: string هو string | undefined، واستدعاء طرق السلاسل النصية عليه مباشرةً يعطي خطأً؛ ضيّقه أولًا بـ if (note) أو استخدم معاملًا افتراضيًا بدلًا منه.
💡 تلميح عند تجاوز عدد المعاملات 3، انتقل إلى تمرير كائن إعدادات (options: { prefix?: string; note?: string }) — فهو أقرب إلى القراءة وأسهل توسعةً من قائمة مواضع طويلة.
🏷️ الدوال والأصناف ذات صلة
💡 حالات ذات صلة
المزيد من الحالات قادم قريبًا.
📚 دروس ذات صلة
❓ أسئلة شائعة
س هل يمكن دمج المعامل الافتراضي والاختياري معًا؟
ج نعم وهو أمر شائع: prefix = "ORD" له قيمة افتراضية ويمكن إغفاله معًا. أما المعامل الاختياري الصِرف فيكون undefined عند الإغفال، فيجب على جسم الدالة التعامل مع ذلك بنفسه.
س هل يمكن وضع معامل إلزامي بعد اختياري؟
ج لا، المترجم يطلب الإلزامية أولًا. والاستثناء هو المعامل الافتراضي في الوسط: لتخطيه مرِّر undefined صراحةً، مثل buildLabel(42, undefined, "加急").
س كيف تختار بين المعاملات الافتراضية والتحميل الزائد للدوال؟
ج إذا كان المطلوب فقط «تمرير معاملات أقل» فاستخدم القيم الافتراضية/المعاملات الاختيارية؛ أما إذا اختلفت أنواع المعاملات نفسها (string أو Date تتبع منطقًا مختلفًا) فتحتاج إلى التحميل الزائد.