بازگشت به بلاگ
توسعه وب
۱۴۰۴/۰۹/۱۱
۸ دقیقه مطالعه

چرا Zod بهترین ابزار برای Validation در TypeScript است؟

Darvix Team
نویسنده

اگر با TypeScript کار کرده‌اید، احتمالاً با این مشکلات برخورد کرده‌اید:

  • کدهای پر از if و typeof و Array.isArray
  • اختلاف بین typeهای TypeScript و ساختار واقعی داده‌ها در runtime
  • دریافت داده‌ی خراب (invalid) از API بدون هندل مناسب
  • تکرار validation در فرانت و بک‌اند

TypeScript فقط در زمان کامپایل کمک می‌کند؛ اما در runtime هیچ تضمینی برای شکل واقعی داده‌ها نداریم.

راه‌حل: Zod به‌عنوان Single Source of Truth

Zod یک کتابخانه‌ی schema-based است که همزمان:

  • typeهای TypeScript را برای شما تولید می‌کند
  • و در runtime همان ساختار را validate می‌کند

یک مثال ساده:

ts

حالا:

  • User همیشه از روی userSchema تولید می‌شود
  • اگر API دیتای خراب برگرداند، هنگام parse خطا می‌گیرید

مزایای استفاده از Zod در TypeScript

۱. Type Safety واقعی (compile-time + runtime)

با TypeScript تنها در زمان کامپایل مطمئن هستید. اما Zod:

  • در runtime داده را با schema چک می‌کند
  • در TypeScript هم با z.infer نوع امن تولید می‌کند
ts

۲. یک منبع واحد برای Type و Validation

بدون Zod معمولاً این الگو را می‌بینیم:

  • یک interface برای TypeScript
  • چندین جای مختلف با if و typeof برای validation

با Zod همه‌چیز در یک جاست:

ts

هم در فرانت‌اند برای فرم و هم در بک‌اند برای API می‌توانید از همین schema استفاده کنید.

۳. DX قوی و API بسیار خوانا

زبان توصیف اسکیمای Zod بسیار نزدیک به انگلیسی و قابل‌خواندن است:

ts
  • پیام خطا را کنار همان فیلد تعریف می‌کنید
  • coerce کمک می‌کند رشته‌ها را به عدد/تاریخ تبدیل کنید

الگوهای رایج استفاده از Zod در پروژه‌های واقعی

۱. Validation ورودی API (Backend)

ts

۲. استفاده در فرم‌های React

ts

می‌توانید این schema را به‌راحتی با کتابخانه‌هایی مثل react-hook-form ترکیب کنید.

۳. ساختن Schemaهای قابل ترکیب

ts

به‌جای کپی کردن فیلدها، اسکیمای جدید را از قبلی می‌سازید.

نکات کلیدی برای استفاده بهتر از Zod

  • همیشه از z.infer<typeof schema> برای گرفتن Type استفاده کنید
  • اسکیمای مشترک بین کلاینت و سرور را در یک پکیج/پوشه‌ی shared نگه‌دارید
  • از safeParse به‌جای parse استفاده کنید تا کنترل کامل روی خطا داشته باشید
  • برای اسکیمای پیچیده آن‌ها را به چند schema کوچک‌تر بشکنید و composable بسازید

جمع‌بندی

با Zod:

  • اختلاف بین typeهای TypeScript و داده‌ی واقعی حذف می‌شود
  • validation در یک نقطه متمرکز می‌شود
  • DX توسعه‌دهنده به‌شدت بهتر می‌شود

اگر در پروژه‌های TypeScript هنوز از Zod (یا ابزار مشابه) استفاده نمی‌کنید، همین امروز یک لایه‌ی validation کوچک اضافه کنید؛ خیلی زود متوجه می‌شوید که چند تا باگ runtime کمتر می‌گیرید و چقدر اعتماد به داده‌ها بیشتر شده است.

اشتراک‌گذاری این مقاله

از خواندن این مقاله لذت بردید؟

برای مطالعه مقالات بیشتر و دریافت آخرین مطالب، با ما در ارتباط باشید