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 — وسبب آخر للتوصية بتفعيل الوضع الصارم دائمًا.