NonNullable<T>

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

NonNullable<T> NonNullable

يستبعد NonNullable<T> من النوع T كلاً من null وundefined. وهو مناسب للحالات التي «يُسمح فيها بالفراغ في الإعلان لكن العمل يضمن عدمه عند هذا الموضع» — كالرجوع إلى القيم الافتراضية أو التصفية بعد فلترة المصفوفات. وهو في جوهره اسم مخصص لـ Exclude<T, null | undefined>.

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

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

📝 الصيغة

type NonNullable<T> = T extends null | undefined ? never : T;

// الاستخدام
type Name = NonNullable<string | null | undefined>;  // string

function pickFirst(values: Array<string | null | undefined>): string {
  for (const v of values) {
    if (v != null) {
      const clean: NonNullable<typeof v> = v;
      return clean;
    }
  }
  return "(none)";
}

⚙️ المعاملات

Tالنوع المصدر، وغالبًا ما يحتوي أعضاء null/undefined؛ وعندما يكون اتحاديًا تُزال القيم الفارغة عضوًا عضوًا

القيمة المُعادة:نوع جديد: T بعد إزالة null وundefined.

▶ مثال

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

الناتج:

Ada
(none)

(مخرجات التشغيل بعد الترجمة؛ على مستوى النوع: CleanField هو string | number — فقد زالت null/undefined بفعل NonNullable، ولن ينجح الفحص إلا بإسناد القيم التي نجت من مرشح v != null)

💡 نقاط مهمة

ℹ️ معلومة التطبيق: type NonNullable<T> = T extends null | undefined ? never : T — النمط الشرطي الموزَّع نفسه المستخدم في Exclude.
💡 تلميح يغيّر الأنواع فقط لا القيم: «إزالة الفراغ» في التشغيل تعتمد على مرشح v != null أو القيم الافتراضية ?? أو Array.filter. واكتمال الصورة يكون بقرين الأداة على مستوى النوع والتنظيف في وقت التشغيل.
⚠️ تنبيه لا تستخدم NonNullable «تبييضًا» لفراغ لست واثقًا منه: إعادة وسم string | null بوصفها string تنجح في الترجمة لكنها تنهار على null.dosomething في وقت التشغيل. عالج القيم الفارغة بفحوص التشغيل أولًا.
المزيد من الحالات قادم قريبًا.

📚 دروس ذات صلة

❓ أسئلة شائعة

س ما الفرق بين NonNullable والتأكيد غير الفارغ !؟
ج الأثر واحد «إزالة null/undefined»، لكن NonNullable عملية حسابية على الأنواع (نوع جديد قابل لإعادة الاستخدام والتركيب) بينما ! تأكيد على مستوى التعبير (يُطبق في موضعه ولا يُعاد استخدامه). استخدم NonNullable عندما تحتاج النوع بعد إزالة الفراغ بوصفه نوعًا قائمًا بذاته.
س هل يؤثر NonNullable على boolean؟
ج لا يستبعد false — فنطاقه القيمتان الحرفيتان null وundefined فقط. فالصيغة NonNullable<boolean | null> تعطي boolean (متضمنة true وfalse).
س هل يبقى لـ NonNullable معنى بعد إيقاف strictNullChecks؟
ج في الوضع غير الصارم تكون null/undefined أصلًا قابلة للإسناد إلى كل الأنواع فلا يبقى لتضييق NonNullable أثر ملحوظ. لا معنى له إلا مع strictNullChecks — وسبب آخر للتوصية بتفعيل الوضع الصارم دائمًا.
Web-Tutorial.com

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

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

100%