การตรวจสอบสคีมาด้วย zod และการอนุมานเป็น TS
ตรวจสอบคำขอด้วย zod อนุมานชนิดข้อมูล TypeScript จากสคีมา และเพิ่มมิดเดิลแวร์กับการจัดการข้อผิดพลาดที่ปลอดภัย
การตรวจสอบสคีมาด้วย zod และการอนุมานเป็น TS เป็นบทเรียน TypeScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน TypeScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 3 บทเรียน
บทนำ
เป้าหมาย: ตรวจสอบข้อมูลขาเข้าด้วย zod และทำให้ชนิด TypeScript สอดคล้องกันผ่าน z.infer คุณจะวิเคราะห์ข้อมูลอย่างปลอดภัย ส่งข้อผิดพลาดที่เป็นประโยชน์ และเชื่อมการตรวจสอบเข้ากับมิดเดิลแวร์
- กำหนดสคีมาเพียงครั้งเดียว
- อนุมานชนิด TS
- safeParse + ข้อผิดพลาด 400
สคีมาและการอนุมาน
จำลองข้อมูลด้วย zod เพียงครั้งเดียว ชนิดที่ได้จาก type User = z.infer<typeof userSchema> จะตรงกับการตรวจสอบทุกประการ
import { z } from "zod"
export const userSchema = z.object({
id: z.string().regex(/^u_[a-z0-9]+$/),
name: z.string().min(1),
age: z.number().int().nonnegative().optional()
})
export type User = z.infer<typeof userSchema>
// Reuse `User` across handlers, services, and testssafeParse ในตัวจัดการ
ใช้ safeParse เพื่อหลีกเลี่ยงข้อยกเว้น และคืนค่า400พร้อมปัญหาที่จัดรูปแบบแล้ว ชนิดของการตอบกลับสะท้อนทั้งรูปร่างเมื่อสำเร็จและเมื่อเกิดข้อผิดพลาด
import { Request, Response } from "express"
import { userSchema, User } from "./schema"
export function createUser(req: Request<{}, User, unknown>, res: Response<User | { error: string; issues?: unknown }>) {
const parsed = userSchema.safeParse(req.body)
if (!parsed.success) {
return res.status(400).json({ error: "Invalid body", issues: parsed.error.format() })
}
const user = parsed.data
return res.status(201).json(user)
}ตัวช่วยมิดเดิลแวร์
สร้างมิดเดิลแวร์ที่นำกลับมาใช้ใหม่ได้ โดยจะแยกวิเคราะห์เนื้อหา แล้วแนบข้อมูลที่มีชนิดหรือคืนค่า 400 พร้อมรายละเอียด
import { z } from "zod"
import { Request, Response, NextFunction } from "express"
export function validateBody<T extends z.ZodTypeAny>(schema: T) {
return (req: Request, res: Response, next: NextFunction) => {
const r = schema.safeParse(req.body)
if (!r.success) {
return res.status(400).json({ error: "Invalid body", issues: r.error.format() })
}
req.body = r.data
next()
}
}การบังคับชนิดและ refine
ใช้ z.coerce เพื่อรับตัวเลขในรูปสตริง ใช้ z.enum กับค่าที่กำหนดไว้ และใช้ .refine สำหรับกฎที่ตรวจสอบข้ามฟิลด์
import { z } from "zod"
const signupSchema = z.object({
email: z.string().email(),
age: z.coerce.number().int().gte(13),
role: z.enum(["user", "admin"]).default("user")
}).refine(v => v.role !== "admin" || v.age >= 18, { message: "admin must be adult" })
export type Signup = z.infer<typeof signupSchema>
// Coercion allows numbers in strings; refine adds cross-field rulesเคล็ดลับเกี่ยวกับข้อผิดพลาด
เคล็ดลับเกี่ยวกับข้อผิดพลาด:
- ใช้
safeParseที่ขอบเขตของระบบเสมอ - จัดรูปแบบปัญหาให้เหมาะกับไคลเอ็นต์ และหลีกเลี่ยงการเปิดเผยร่องรอยสแตก
- จำกัดชนิดของ
unknownให้เป็นZodErrorหากดักจับการแยกวิเคราะห์ที่โยนข้อผิดพลาด
การตรวจสอบการอนุมานชนิดของ zod
ตรวจสอบอย่างรวดเร็ว: จะทำให้ชนิดของ TS สอดคล้องกับสคีมาของ zod ได้อย่างไร
สรุปทบทวน
สรุปทบทวน: กำหนดสคีมาเพียงหนึ่งชุด อนุมานชนิด TS ตรวจสอบด้วย safeParse และเชื่อมต่อเข้ากับมิดเดิลแวร์เพื่อให้ได้ข้อผิดพลาด 400 อย่างสอดคล้องกัน
คำถามที่พบบ่อย
บทเรียน “การตรวจสอบสคีมาด้วย zod และการอนุมานเป็น TS” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การตรวจสอบสคีมาด้วย zod และการอนุมานเป็น TS” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส TypeScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 3 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การตรวจสอบสคีมาด้วย zod และการอนุมานเป็น TS”
ตรวจสอบคำขอด้วย zod อนุมานชนิดข้อมูล TypeScript จากสคีมา และเพิ่มมิดเดิลแวร์กับการจัดการข้อผิดพลาดที่ปลอดภัย คุณปฏิบัติ TypeScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน TypeScript Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน TypeScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน
บทเรียน “การตรวจสอบสคีมาด้วย zod และการอนุมานเป็น TS” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน TypeScript Academy นี้ได้ไหม
ได้ บทเรียน TypeScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ตัวจัดการเราเตอร์และการกำหนดชนิดข้อมูล Request/Response
- การตรวจสอบสคีมาด้วย zod และการอนุมานเป็น TS
- มิดเดิลแวร์ข้อผิดพลาดและชนิดข้อมูลผลลัพธ์