انتقل إلى المحتوى

تحويل TypeScript إلى مخطط Zod — Numio

يُنشئ مخططات Zod من واجهات وأنواع TypeScript باستخدام ts-to-zod. يصبح كل نوع Foo مخططًا مُصدَّرًا باسم fooSchema، وتصبح وسوم JSDoc مثل @format email أو @minimum مدققات Zod.

أنواع واجهتك البرمجية موجودة بالفعل كواجهات TypeScript وتريد التحقق من الطلبات الواردة وقت التشغيل دون كتابة المخططات يدويًا.

TypeScript

Zod Schema

متى تستخدمها

  • أنواع واجهتك البرمجية موجودة بالفعل كواجهات TypeScript وتريد التحقق من الطلبات الواردة وقت التشغيل دون كتابة المخططات يدويًا.
  • تتحقق من مدخلات النماذج باستخدام Zod وتريد أن يبقى المخطط متسقًا مع نوع TypeScript المشترك.

طريقة الاستخدام

  1. الصق واجهات TypeScript أو أسماء أنواع مستعارة؛ وأضف وسوم JSDoc مثل @minimum 13 أو @format email للحصول على مدققات.
  2. في الإعدادات، فعّل Keep TSDoc Comments لنسخ التعليقات إلى الناتج، أو Skip the creation of zod validators from JSDoc annotations لتجاهل الوسوم.
  3. تُحوَّل الشيفرة المصدرية على الخادم عبر /api/typescript-to-zod؛ انسخ الشيفرة التي تستورد z من "zod".

TypeScript

export interface Signup {
  /**
   * @format email
   */
  email: string;
  /**
   * @minimum 13
   * @maximum 120
   */
  age: number;
  plan: "free" | "pro";
  referrer?: string | null;
  createdAt: Date;
}

مخططات Zod

import { z } from "zod"

export const signupSchema = z.object({
  email: z.string().email(),
  age: z.number().min(13).max(120),
  plan: z.union([z.literal("free"), z.literal("pro")]),
  referrer: z.string().optional().nullable(),
  createdAt: z.date(),
})

التفاصيل والقيود

ترسل الصفحة مدخلاتك إلى مسار على الخادم (/api/typescript-to-zod) لتحويلها؛ فهي لا تُعالَج في المتصفح فقط. تقبل مسارات API في Next.js افتراضيًا أجسام طلبات حتى 1 ميغابايت.

تُحوَّل الأنواع فقط. لا تُنتج الدوال والثوابت المُصدَّرة أي مخطط.

إذا أشار نوع إلى نوع غير موجود في المدخلات، يُبلغ المحوّل عن خطأ اعتمادية مفقودة بدلًا من إخراج مخطط.

تُرتَّب المخططات حسب الاعتماديات، فيُخرَج النوع المُشار إليه مثل Author قبل النوع الذي يستخدمه.

FAQ

كيف تُحوَّل الحقول الاختيارية وحقول null؟

يصبح referrer?: string | null إلى z.string().optional().nullable()؛ وتصبح الخاصية ذات النوع Author | null إلى authorSchema.nullable().

كيف يُعالَج Date؟

تصبح خاصية Date إلى z.date()، الذي يقبل كائنات Date وليس سلاسل ISO. استخدم z.coerce.date() لمدخلات JSON.

لماذا تظهر الرسالة "Some schemas can't be generated due to direct or indirect missing dependencies"؟

يشير نوع إلى نوع آخر غير موجود في الشيفرة الملصقة. الصق الأنواع المُشار إليها أيضًا.

المواصفات والمراجع