المكان · فصل ٦

الـ typing بتاع الـ Query

inference · useQuery · queryFn · generic
🎯 الهدف: تسيب TanStack Query تستنتج نوع data من دالة الـ API، وتعرف إن الـ generic لوحده مش runtime validation.

النوع يتستنتج من الدالة

users.queries.ts
export const useUserQuery = (id: number) =>  useQuery({    queryKey: ["users", id],    queryFn: () => getUser(id),  });

طالما getUser() بترجع Promise<User> بعد الـ validation، فإن TanStack Query هتستنتج إن data نوعها User تلقائيًا.

مش محتاج تكتب useQuery&lt;User&gt; إلا لو عندك سبب محدد. الأفضل عادةً إن الـ TypeScript inference يشتغل لوحده، وإن الـ API function هي اللي تضمن نوع الداتا.

الـ generic لوحده مش فحص

أما لو كتبت useQuery<User> مع API بترجع JSON غير متحقق منه، فأنت كده بتحدد النوع المتوقع للـ compiler، لكنك لسه ما ضمنتش صحة الـ response الفعلية.

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

🧠 اختبر نفسك
١) ليه data تبقى User من غير ما تكتب generic على useQuery؟
لأن getUser بترجع Promise<User> بعد الـ validation، والـ inference بياخد النوع ده.
٢) useQuery على JSON متفحصش. كده الـ response مضمون؟
لأ. ده نوع للكومبايلر بس، مش runtime validation.