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. أبقِ الوضع الصارم مفعّلًا دائمًا.
Web-Tutorial.com

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

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

100%