ما هو Zod؟
Zod هي مكتبة للتحقق التصريحي من البيانات وتحليلها، مكتوبة بلغة TypeScript. تتيح لك وصف مخططات البيانات (المخططات هي أوصاف صارمة للأنواع) والتحقق من تطابق أي كائنات أو نصوص أو أرقام وما إلى ذلك معها. الميزة الرئيسية لـ Zod هي التكامل الكامل مع TypeScript: حيث يتم استنتاج الأنواع تلقائيًا بناءً على المخطط، مما يلغي الحاجة إلى تكرار التعريفات.
لماذا نحتاج إلى التحقق من صحة البيانات؟
في التطبيقات الواقعية، غالبًا ما تأتي البيانات من مصادر خارجية (API، نماذج، ملفات تهيئة، localStorage). بدون التحقق من الصحة، يمكن بسهولة حدوث أخطاء برمجية أو هجمات XSS أو سلوك غير متوقع. يضمن Zod أن البيانات تتوافق مع البنية المتوقعة، ويطرح أخطاء واضحة إذا كان هناك خطأ ما.
التثبيت
npm install zodالمكتبة لا تتطلب إعدادات إضافية وتعمل في كل من Node.js والمتصفح (مع bundler).
الوظائف الأساسية
- إنشاء المخططات:
z.string(),z.number(),z.object(),z.array()، إلخ. - التحليل والتحقق: الطريقة
.parse()تعيد البيانات أو تطرح خطأ؛.safeParse()تعيد كائنًا يحتوي على الحقول success/data/error. - التحويل:
.transform()يسمح بتعديل البيانات بعد التحقق الناجح. - Refine: عمليات تحقق مخصصة باستخدام
.refine(). - استنتاج الأنواع:
z.infer<typeof schema>يولد نوع TypeScript.
مثال كود بلغة TypeScript
import { z } from 'zod';
// تعريف مخطط للمستخدمconst UserSchema = z.object({ id: z.number().int().positive(), name: z.string().min(2).max(50), email: z.string().email(), age: z.number().min(18).max(120).optional(), role: z.enum(['admin', 'user', 'guest'])});
// استنتاج النوع بناءً على المخططtype User = z.infer<typeof UserSchema>;
// استخدام safeParse للتحقق الآمنconst rawData = { id: 1, name: 'Анна', email: 'anna@example.com', age: 25, role: 'admin'};
const result = UserSchema.safeParse(rawData);if (result.success) { console.log('البيانات صالحة:', result.data);} else { console.error('الأخطاء:', result.error.errors);}متى تستخدم Zod
Zod مثالي لـ:
- التحقق من بيانات الإدخال لواجهات API (مثل Express أو Next.js).
- التحقق من بيانات النماذج على العميل والخادم.
- تحليل متغيرات البيئة (
dotenv+ Zod). - العمل مع ملفات التهيئة (JSON/YAML).
- إنشاء أنواع صارمة للبيانات الديناميكية.
بفضل الدعم الكامل لـ TypeScript، يجعل Zod الكود أكثر أمانًا وقابلية للقراءة، مما يلغي عدم التزامن بين الأنواع والبيانات الفعلية.
```