TypeError من أكثر أخطاء جافاسكريبت تكرارًا. المعنى العام
بسيط: استخدمتَ قيمة بطريقة لا تناسب نوعها. لنستعرض أشهر أشكاله وحلّ كلٍّ منها.
1) TypeError: x is not a function
const user = { name: "براء" };
user.greet(); // ❌ TypeError: user.greet is not a function
السبب: استدعيت شيئًا ليس دالة. غالبًا خطأ إملائي في الاسم، أو المتغيّر ليس من النوع الذي تظنّه.
الحل: تأكّد أن الخاصية دالة فعلًا قبل استدعائها:
if (typeof user.greet === "function") {
user.greet();
}
2) TypeError: Cannot read properties of undefined
هذا الأشهر على الإطلاق، وله مقال مخصّص:
const data = {};
console.log(data.user.name); // ❌ data.user غير موجود
الحل: استخدم السلسلة الاختيارية ?.:
console.log(data.user?.name ?? "غير متوفّر");
3) TypeError: Assignment to constant variable
const count = 1;
count = 2; // ❌ لا يمكن إعادة تعيين ثابت
السبب: حاولت تغيير متغيّر معرّف بـ const.
الحل: إن كنت تحتاج تغيير القيمة استخدم let. راجع الفرق الكامل في
let و var و const:
let count = 1;
count = 2; // ✅
💡 ملاحظة:
constيمنع إعادة التعيين فقط، لا تعديل محتوى الكائن. يمكنكconst arr = []; arr.push(1)بلا خطأ.
4) TypeError: x is not iterable
const n = 5;
for (const item of n) {} // ❌ الأرقام غير قابلة للتكرار
الحل: تأكّد أنك تكرّر على مصفوفة أو نصّ أو Set/Map، لا على رقم أو undefined.
جدول مرجعي سريع
| الرسالة | المعنى | الحل المختصر |
|---|---|---|
| is not a function | ليست دالة | راجع الاسم وtypeof |
| Cannot read properties of undefined | قراءة من قيمة فارغة | ?. والتحقّق |
| Assignment to constant | تعديل ثابت | استخدم let |
| is not iterable | غير قابل للتكرار | كرّر على مصفوفة/نصّ |
كيف تشخّص أي TypeError؟
- اقرأ رقم السطر في رسالة الخطأ — يشير للموقع الدقيق.
- اطبع القيمة قبل السطر:
console.log(typeof x, x). - اسأل: هل القيمة من النوع الذي أتوقّعه؟ غالبًا ستجدها
undefined.
الخلاصة
TypeError يقول: "نوع القيمة لا يناسب ما تحاول فعله بها." معظم الحالات تعود إلى
قيمة undefined غير متوقّعة، أو استخدام const حيث يلزم let. تحقّق من الأنواع
مبكرًا واستخدم ?. بسخاء.
تعمّق في أنواع البيانات في جافاسكريبت و أخطاء undefined.