النوع any (تجنّبه)
any يعطّل فحص الأنواع تمامًا — يعيدك إلى JavaScript بلا حماية:
let data: any = 5;
data = "نص"; // مسموح
data.foo.bar(); // لا خطأ وقت الترجمة (وقد ينهار وقت التشغيل!)
⚠️ استخدام
anyيلغي فائدة TypeScript. تجنّبه قدر الإمكان.
النوع unknown (البديل الآمن)
unknown يقبل أي قيمة مثل any، لكنه يمنعك من استخدامها قبل التحقّق
من نوعها:
let value: unknown = getData();
// value.toUpperCase(); // خطأ! يجب التحقّق أولًا
if (typeof value === "string") {
console.log(value.toUpperCase()); // آمن الآن
}
النوع void
يمثّل دالة لا تُرجع قيمة:
function logMessage(msg: string): void {
console.log(msg);
// لا return بقيمة
}
النوع never
يمثّل قيمة لا تحدث أبدًا — دالة لا تنتهي أو ترمي خطأً دائمًا:
function throwError(message: string): never {
throw new Error(message);
}
null و undefined
مع تفعيل strictNullChecks (ضمن strict)، لا يمكن إسناد null لنوع عادي:
let name: string = null; // خطأ مع strict
let name2: string | null = null; // صحيح
التعامل الآمن:
function greet(name: string | null) {
if (name === null) {
return "زائر";
}
return name.toUpperCase(); // TypeScript يعرف أنه string هنا
}
أخطاء شائعة
- استخدام
anyلتسكيت الأخطاء — استخدمunknownثم تحقّق. - نسيان أن المتغيّر قد يكون
nullفينهار البرنامج وقت التشغيل.
🎯 التالي: المصفوفات (Arrays) والصفوف (Tuples).