Omit<T, K>

آخر تحديث: 2026-10-22

Omit<T, K> Omit

يستبعد Omit<T, K> من T الخصائص المسماة في K ويبقي الباقي نوعًا جديدًا. من استخدامه النموذجي «إزالة الحساسية» (حذف passwordHash) وتحويل صف قاعدة البيانات إلى استجابة API. وهو عكس Pick: عندما تكون الحقول كثيرة والمستبعد قليلاً يكون Omit أيسر.

المجموعةالأنواع المساعدة
النوعنوع
الوضع الصارمغير مطلوب

ℹ️ معلومة يحوّل المحرر لغة TypeScript إلى JavaScript ثم يشغّلها (بدون فحص أنواع)؛ راجع ناتج كل مثال لنتيجة فحص الأنواع.

📝 الصيغة

type Omit<T, K extends string | number | symbol> =
  Pick<T, Exclude<keyof T, K>>;

// الاستخدام
type PublicAccount = Omit<Account, "passwordHash" | "twoFA">;

⚙️ المعاملات

Tنوع الكائن المصدر الذي تُستبعد منه الخصائص
Kاتحاد المفاتيح المراد استبعادها؛ لاحظ أن K غير مطلوب أن يكون مفتاحًا في T — والمفتاح المكتوب خطأً يُتجاهل بصمت

القيمة المُعادة:نوع جديد: يحتوي كل خصائص T عدا تلك المسماة في K، بأنواع مطابقة تمامًا.

▶ مثال

عدّل الكود أدناه واضغط «جرّب» لرؤية نتيجة التحويل:

الناتج:

{"username":"carol","email":"carol@example.com"}

(مخرجات التشغيل بعد الترجمة؛ يزيل التطبيق الحقول الحساسة بتفكيك rest، وعلى مستوى النوع لم تعد PublicAccount تحتوي passwordHash — أما خطأ إملائي مثل Omit<Account, "passwordHash2"> فسيترك الحقل الحساس باقيًا)

💡 نقاط مهمة

ℹ️ معلومة التطبيق تركيبة: Omit<T, K> = Pick<T, Exclude<keyof T, K>> — يستبعد Exclude أولًا K من اتحاد المفاتيح ثم يحتفظ Pick بالباقي.
⚠️ تنبيه لا يُتحقق من كون K مفتاحًا في T: الصيغة Omit<Account, "passwordHashh"> (حرف زائد) تنجح في الترجمة وتبقي الحقل الحساس. ولإزالة الحساسية الحساسة للأمان يفضَّل نسخة صارمة: type StrictOmit<T, K extends keyof T> = Omit<T, K>.
💡 تلميح الـ Omit قائمة سوداء: الحقول التي ستُضاف إلى Account لاحقًا تظهر تلقائيًا في نتيجته. وهذا سبب ملاءمته تمامًا لسيناريو «كشف كل شيء وإخفاء القليل».
المزيد من الحالات قادم قريبًا.

📚 دروس ذات صلة

❓ أسئلة شائعة

س أيهما أختار فعلًا: Omit أم Pick؟
ج انظر إلى المقصد: «أريد هذه فقط» → Pick (قائمة بيضاء، أوضح عندما تكون الحقول قليلة)؛ «استبعد هذه» → Omit (قائمة سوداء، فحقول المصدر المستقبلية تمر تلقائيًا). وفي سيناريوهات إزالة الحساسية الحساسة أمانًا يكون Pick أكثر رسوخًا (المفتاح الخاطئ يعطي خطأً).
س لماذا لا يتحقق Omit من المفاتيح كما يفعل Pick؟
ج القيد الرسمي K extends string | number | symbol متساهل عمدًا لدعم الاستبعاد من أشكال غير معروفة تمامًا. والتساهل سلاح ذو حدين: مرونة لكن الخطأ الإملائي يفشل بصمت. ويمكن استعادة الصرامة بـ StrictOmit من سطر واحد.
س كيف أزيل الخاصية فعلًا في وقت التشغيل؟
ج لا يغيّر Omit الأنواع فقط. في وقت التشغيل استخدم تفكيك rest: const { passwordHash, ...rest } = account; أو delete account.passwordHash (خطأ ترجمة مع الخصائص الواجبة في الوضع الصارم). والتفكيك بـ rest هو الأسلوب الموصى به.
Web-Tutorial.com

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

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

100%