Partial<T> Partial (مع Required)
آخر تحديث: 2026-10-22
Partial<T> Partial (مع Required)
يجعل Partial<T> كل خصائص T اختيارية: وهو مثالي لسيناريو «التحديث الجزئي» (مسودات النماذج، نقاط نهاية patch) — فلا حاجة إلى كتابة نوع جديد يدويًا من أجل تعديل حقلين فقط. وهو مرآة معكوسة لـ Required<T>.
| المجموعة | الأنواع المساعدة |
|---|---|
| النوع | نوع |
| الوضع الصارم | غير مطلوب |
ℹ️ معلومة يحوّل المحرر لغة TypeScript إلى JavaScript ثم يشغّلها (بدون فحص أنواع)؛ راجع ناتج كل مثال لنتيجة فحص الأنواع.
📝 الصيغة
type Partial<T> = {
[K in keyof T]?: T[K];
};
// الاستخدام
function applyPatch(user: UserProfile, patch: Partial<UserProfile>): UserProfile;
⚙️ المعاملات
| T | نوع الكائن المراد تحويله؛ يتجاوز النوع المُعَيَّن كل خاصية K ونوعها T[K] واحدًا تلو الآخر |
|---|
القيمة المُعادة:نوع جديد: مجموعة خصائصه هي خصائص T نفسها، لكنها جميعًا اختيارية بعلامة ?.
▶ مثال
عدّل الكود أدناه واضغط «جرّب» لرؤية نتيجة التحويل:
الناتج:
{"id":1,"name":"Diana","email":"d@example.com","age":22}
(مخرجات التشغيل بعد الترجمة؛ يمرر patch حقل age فقط وتبقى بقية الحقول على قيمها الأصلية)
💡 نقاط مهمة
ℹ️ معلومة التطبيق نوع مُسَنَّد (mapped type): [K in keyof T]?: T[K] — تجاوز كل مفتاح من مفاتيح T وإضافة علامة ? (للاشتقاق الكامل انظر الدرس 19 «مبادئ تطبيق أنواع الأدوات»).
⚠️ تنبيه يعمل Partial على المستوى الأول فقط: أنواع خصائص الكائنات المتداخلة لا تصبح اختيارية تكراريًا؛ وللخيارية العميقة اكتب DeepPartial بنفسك (نوع مُسَنَّد تكراري).
💡 تلميح يرمي Partial وRequired بعضهما البعض (إضافة ? وإزالتها)؛ وبدمجه مع Pick/Omit يمكن بناء أنواع patch دقيقة لا تسمح بتعديل حقول محددة فحسب.
🏷️ الأنواع المساعدة ذات صلة
💡 حالات ذات صلة
المزيد من الحالات قادم قريبًا.
📚 دروس ذات صلة
❓ أسئلة شائعة
س ما الفرق بين Partial وكتابة ? يدويًا على كل خاصية؟
ج الأثر نفسه، لكن Partial يتتبع النوع المصدر تلقائيًا: أضف حقلًا إلى UserProfile فيشمله Partial<UserProfile> تلقائيًا بنسخته الاختيارية، بينما تنزاح النسخة اليدوية صامتةً عن الصواب.
س هل تصبح الخصائص المتداخلة اختيارية أيضًا؟
ج لا. التحويل سطحي — المستوى الأول فقط يأخذ ?؛ فالحقل address: {city: string} يصبح اختياريًا ككل لكن city داخله يبقى واجبًا. اكتب DeepPartial للاحتياجات العميقة.
س هل يجوز بعد Partial إسناد undefined إلى الحقول؟
ج إغفال الحقول مسموح دائمًا؛ أما الإسناد الصريح لـ undefined فيعتمد على strictNullChecks: في الوضع الصارم تصبح أنواع حقول Partial هي T[K] | undefined. أبقِ الوضع الصارم مفعّلًا دائمًا.