مخططات zod/valibot + الاستدلال
تحقّق من البيانات غير الموثوقة باستخدام المخططات، واستنتج أنواع TS مباشرةً من أدوات التحقق، وقارن بين zod وvalibot، واربطها بالمعالجات.
مخططات zod/valibot + الاستدلال درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 1 من أصل 2. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 2 دروس في المجموع.
مقدمة
الهدف: تعامل مع المدخلات الخارجية باعتبارها unknown، وتحقق منها باستخدام مخطط، ثم استنتج أنواع TS من ذلك المخطط. ستستخدم zod، وتطّلع على صياغة valibot، وتنشئ مساعدًا صغيرًا لمعالجات الطلبات.
- مصدر واحد للحقيقة
- safeParse مقابل parse
- إعادة استخدام الأنواع المستنتجة
استنتاج الأنواع باستخدام zod
عرّف مخططًا مرةً واحدة. يعكس type User = z.infer<typeof userSchema> قواعد التحقق بدقة.
import { z } from "zod"
export const userSchema = z.object({
id: z.string().uuid(),
name: z.string().min(1),
age: z.number().int().min(0).optional()
})
export type User = z.infer<typeof userSchema>
// User is kept in sync with runtime rules.safeParse مقابل parse
يعطي safeParse نتيجة نجاح أو فشل دون طرح استثناء، ما يجعله مناسبًا لمعالجات HTTP؛ بينما يطرح parse استثناءً عند وجود مدخلات غير صالحة.
import type { Request, Response } from "express"
import { userSchema, type User } from "./schema"
export function createUser(req: Request, res: Response<User | { error: string; issues?: unknown }>) {
const r = userSchema.safeParse(req.body)
if (!r.success) {
return res.status(400).json({ error: "Invalid body", issues: r.error.format() })
}
const user = r.data
return res.status(201).json(user)
}
// parse() throws; safeParse() returns a discriminated unionاستنتاج الأنواع باستخدام valibot
تقدّم valibot أداة تحقق موجزة باستخدام Infer<typeof schema>. اختر مكتبة واحدة ووحّد استخدامها بين أعضاء الفريق.
import { object, string, number, optional, minLength, uuid, minValue } from "valibot"
import type { Infer } from "valibot"
export const VUser = object({
id: string([uuid()]),
name: string([minLength(1)]),
age: optional(number([minValue(0)]))
})
export type VUserT = Infer<typeof VUser>
// Similar idea: one schema, inferred type.مساعد التحقق
غلّف عملية التحليل في مساعد صغير لكي تحصل معالجات الطلبات على بنية بسيطة من الشكل { ok,data } مقابل { ok:false,issues }.
import { ZodTypeAny } from "zod"
export function validate<T extends ZodTypeAny, Out = unknown>(schema: T, value: unknown, onError?: (issues: unknown) => never | void): { ok: true; data: Out } | { ok: false; issues: unknown } {
const r = schema.safeParse(value)
if (!r.success) {
const issues = r.error.format()
if (onError) onError(issues as unknown as never)
return { ok: false, issues }
}
return { ok: true, data: r.data as unknown as Out }
}نصائح
نصائح:
- أبقِ المخططات قريبة من الحدود (HTTP وCLI وعمليات إدخال وإخراج قاعدة البيانات).
- استنتج الأنواع وصدّرها، وتجنب التكرارات المكتوبة يدويًا.
- أرجِع 400 مع تفاصيل المشكلات، ولا تثق أبدًا بمدخلات العميل.
التحقق من فائدة الاستنتاج
تحقق سريع: لماذا نستنتج الأنواع من المخططات؟
خلاصة
خلاصة: تحقّق من المدخلات غير المعروفة باستخدام zod/valibot، واستخدم safeParse، واستنتج الأنواع للحفاظ على التوافق بين وقت الترجمة ووقت التشغيل.
الأسئلة الشائعة
هل درس «مخططات zod/valibot + الاستدلال» مجاني؟
نعم — نص درس «مخططات zod/valibot + الاستدلال» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 2 دروس في المجموع.
ماذا ستتعلم في «مخططات zod/valibot + الاستدلال»؟
تحقّق من البيانات غير الموثوقة باستخدام المخططات، واستنتج أنواع TS مباشرةً من أدوات التحقق، وقارن بين zod وvalibot، واربطها بالمعالجات. تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟
لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 2.
كم من الوقت يستغرق درس «مخططات zod/valibot + الاستدلال»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟
نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- مخططات zod/valibot + الاستدلال
- التحليل الدفاعي وأغلفة الأخطاء