Parameters<T> Parameters (مع ConstructorParameters/InstanceType)
آخر تحديث: 2026-10-22
Parameters<T> Parameters (مع ConstructorParameters/InstanceType)
يستخرج Parameters<T> قائمة معاملات نوع الدالة T بوصفها نوع صف (tuple). وبه يمكنك تخزين «حزمة وسائط» ونقلها وتمريرها ككتلة دون كتابة قوائم معاملات مثل [string, number, string?] يدويًا.
| المجموعة | الأنواع المساعدة |
|---|---|
| النوع | نوع |
| الوضع الصارم | غير مطلوب |
ℹ️ معلومة يحوّل المحرر لغة TypeScript إلى JavaScript ثم يشغّلها (بدون فحص أنواع)؛ راجع ناتج كل مثال لنتيجة فحص الأنواع.
📝 الصيغة
type Parameters<T extends (...args: any) => any> =
T extends (...args: infer P) => any ? P : never;
// الاستخدام
type SessionArgs = Parameters<typeof createSession>; // [string, number, string?]
⚙️ المعاملات
| T | نوع دالة؛ ومن الناحية العملية يُحصل عليه دائمًا تقريبًا عبر typeof fn |
|---|
القيمة المُعادة:نوع صف: يقابل معاملات T واحدًا تلو الآخر (متضمنًا الاختياري والباقي)؛ ويكون never إذا لم يكن T نوع دالة.
▶ مثال
عدّل الكود أدناه واضغط «جرّب» لرؤية نتيجة التحويل:
الناتج:
session(u-7, 3600s, default)
retry -> session(u-7, 60s, admin)
(مخرجات التشغيل بعد الترجمة؛ على مستوى النوع: SessionArgs هو [string, number, string?] — فأي تعديل في توقيع createSession ينعكس على الصف تلقائيًا)
💡 نقاط مهمة
ℹ️ معلومة يستند التطبيق كذلك إلى infer: يُلتقط قائمة المعاملات بوصفها صفًا P. تظهر المعاملات الاختيارية في الصف بصيغة string? والمعاملات الباقية بصيغة ...string[].
⚠️ تنبيه مثل ReturnType، تُستخرج مع الدوال المحمَّلة فوق طاقتها قائمة معاملات آخر تحميل فقط.
💡 تلميح أدوات العائلة ذاتها: ConstructorParameters<T> لمعاملات الباني وInstanceType<T> لأنواع نسخ الصنف وThisParameterType<T> لنوع this. وتلمع هذه العائلة عند تغليف APIs خارجية.
🏷️ الأنواع المساعدة ذات صلة
💡 حالات ذات صلة
المزيد من الحالات قادم قريبًا.
📚 دروس ذات صلة
❓ أسئلة شائعة
س هل يمكن نشر الصف المستخرج مباشرة في استدعاء؟
ج نعم — وهذا استخدامه الشهير: createSession(...args). يفحص TS الموضع والعدد والأنواع مقابل الصف؛ فالوسائط الزائدة أو الناقصة تعطي خطأ ترجمة.
س كيف أضيف معاملًا إلى نتيجة Parameters؟
ج تتسلسل الصفوف: type Logged<P extends any[]> = [...P, requestId: string]. وبالجمع مع Parameters يمكن بناء تواقيع «الوسائط الأصلية زائد إضافات» — حيلة مألوفة في الزخارف وبرمجيات الوسيط (middleware).
س هل تعمل Parameters<typeof Class>؟
ج الصنف نفسه دالّة بانية ونوع typeof Class يحمل توقيع بناء. لاستخراج معاملات الباني استخدم ConstructorParameters<typeof Class> المخصص؛ أما Parameters المباشرة فتعطي never (لا يوجد توقيع استدعاء عادي مطابق).