اگر با 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 کمتر میگیرید و چقدر اعتماد به دادهها بیشتر شده است.
اشتراکگذاری این مقاله
Darvix Team
توسعهدهنده و نویسنده مقالات فنی