البداية · فصل ١

المشكلة — TypeScript مش بيراجع الـ API

typing · runtime validation · error handling · Promise · JSON · compile time
🎯 الهدف: تفرّق بين الـ typing والـ runtime validation والـ error handling، وتعرف ليه TypeScript لوحده مش بيتأكد من الـ response.

تلات حاجات مختلفة

في React مع TypeScript وTanStack Query، لازم نفرّق بين تلات حاجات:

  • الـ Typing: إيه نوع الداتا اللي الكود متوقع يتعامل معاها؟
  • الـ Runtime Validation: هل الداتا اللي رجعت من الـ API مطابقة فعلًا للنوع المتوقع؟
  • الـ Error Handling: هنعمل إيه لو الداتا مش مطابقة؟

TypeScript مش بيعمل validation للـ API

تخيّل إن عندك API بترجع بيانات المستخدم بالشكل ده:

user.ts
type User = {  id: number;  name: string;  email: string;};

وعندك الـ API request:

get-user.ts
const getUser = async (): Promise<User> => {  const response = await fetch("/api/user");  return response.json();};

هنا أنت بتقول لـ TypeScript إن الدالة بترجع User، لكن هل TypeScript اتأكد إن الـ API رجعت فعلًا id من نوع number وname من نوع string؟

لأ. الـ Promise&lt;User&gt; وعد للكومبايلر، مش فحص للداتا.

الـ API ممكن ترجع:

wrong.json
{  "id": "wrong-id",  "name": null,  "email": 123}

ومع ذلك، TypeScript مش هيكتشف المشكلة وقت تشغيل البرنامج. الـ JSON بيانات خارجية، وTypeScript بيعمل type checking وقت التطوير والـ compilation، مش runtime validation.

الحل إننا نستخدم Runtime Schema Validation.

خلّصت الفصل لما

🧠 اختبر نفسك
١) كتبت getUser ترجع Promise وبتعمل return response.json(). TypeScript اتأكد من الـ response؟
لأ. النوع وعد للكومبايلر. الـ JSON من بره، والفحص وقت التشغيل مش بيحصل لوحده.
٢) الـ API رجّعت id كنص وname بقيمة null. TypeScript هيمسك الغلط وقت التشغيل؟
لأ. الـ type checking وقت التطوير والـ compilation، مش runtime validation.