0Pricing
TypeScript Academy · บทเรียน

การตรวจสอบสคีมาด้วย 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 tests

safeParse ในตัวจัดการ

ใช้ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ตัวจัดการเราเตอร์และการกำหนดชนิดข้อมูล Request/Response
  2. การตรวจสอบสคีมาด้วย zod และการอนุมานเป็น TS
  3. มิดเดิลแวร์ข้อผิดพลาดและชนิดข้อมูลผลลัพธ์
← กลับไปที่ TypeScript Academy