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 هو الأسلوب الموصى به.