التحقق من صحة البيانات في TypeScript: نظرة عامة على مكتبات Zod وYup وio-ts
TypeScript هي لغة ذات أنواع ثابتة تتحقق من الأنواع في مرحلة التجميع. ومع ذلك، في وقت التشغيل (runtime)، لا يقوم TypeScript بإجراء أي فحوصات. وهذا يعني أن البيانات الواردة من مصادر خارجية — مثل طلبات API، ونماذج الإدخال، وملفات التهيئة — قد لا تتطابق مع الأنواع المتوقعة. لحل هذه المشكلة، تُستخدم مكتبات التحقق من صحة البيانات التي تتحقق من بنية وأنواع البيانات في وقت التشغيل.
في هذه المقالة، سنستعرض ثلاث مكتبات شائعة للتحقق من صحة البيانات في TypeScript: Zod وYup وio-ts. ستتعرف على كيفية عملها، وما هي الاختلافات بينها، وكيفية اختيار المكتبة المناسبة لمشروعك.
لماذا نحتاج إلى التحقق من صحة البيانات في TypeScript؟
تخيل أنك تكتب تطبيقًا يستقبل بيانات من المستخدم عبر نموذج:
interface UserInput { name: string; age: number; email: string;}
function processUserInput(input: UserInput) { console.log(input.name.toUpperCase());}في TypeScript، سيتم تجميع هذا الكود حتى لو تبين في وقت التشغيل أن input.name هو undefined أو رقم. سيؤدي ذلك إلى خطأ يصعب اكتشافه. تتيح لك مكتبات التحقق من الصحة ضمان تطابق البيانات مع المخطط المتوقع، وتوفر رسائل خطأ واضحة.
Zod — مكتبة حديثة وسريعة
Zod هي مكتبة للتحقق التصريحي واستنتاج الأنواع. تم إنشاؤها خصيصًا لـ TypeScript وتوفر واجهة برمجة تطبيقات موجزة.
التثبيت:
npm install zodمثال على الاستخدام:
import { z } from 'zod';
// تعريف مخطط التحققconst UserSchema = z.object({ name: z.string().min(2, "يجب أن يحتوي الاسم على حرفين على الأقل"), age: z.number().int().positive("يجب أن يكون العمر رقمًا موجبًا"), email: z.string().email("بريد إلكتروني غير صحيح"),});
// استنتاج النوع بناءً على المخططtype User = z.infer<typeof UserSchema>;
// التحقق من صحة البياناتconst result = UserSchema.safeParse({ name: "آنا", age: 25, email: "anna@example.com",});
if (result.success) { // result.data من النوع User console.log(result.data.name);} else { // result.error يحتوي على معلومات مفصلة عن الأخطاء console.error(result.error.format());}يدعم Zod الهياكل المعقدة: الكائنات المتداخلة، المصفوفات، الاتحادات، والاتحادات المميزة. كما يمكنه تحويل البيانات (مثل تحويل السلاسل النصية إلى أرقام).
Yup — مكتبة شائعة من نظام React البيئي
Yup هي مكتبة للتحقق من صحة المخططات، وتستخدم على نطاق واسع مع Formik في تطبيقات React. لها واجهة برمجة تطبيقات مشابهة لـ Zod، لكنها ظهرت في وقت سابق.
التثبيت:
npm install yupمثال على الاستخدام:
import * as yup from 'yup';
// تعريف المخططconst userSchema = yup.object({ name: yup.string().min(2, "يجب أن يحتوي الاسم على حرفين على الأقل").required(), age: yup.number().integer().positive().required(), email: yup.string().email("بريد إلكتروني غير صحيح").required(),});
// التحقق باستخدام طريقة validateuserSchema.validate({ name: "إيفان", age: 30, email: "ivan@example.com",}).then(validData => console.log(validData)).catch(err => console.error(err.errors));توفر Yup طرقًا ملائمة للتحقق من صحة النماذج، وتدعم رسائل الخطأ المخصصة والقواعد الشرطية (when). ومع ذلك، فهي أقل تكاملاً مع TypeScript مقارنة بـ Zod — حيث يتطلب استنتاج الأنواع إجراءات إضافية.
io-ts — نهج وظيفي للتحقق من الصحة
io-ts هي مكتبة تعتمد على البرمجة الوظيفية. تستخدم مفهوم الترميزات (codecs) لتحويل