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

การประกอบและปรับแต่งสคีมา

สร้างสคีมาที่ซับซ้อนด้วย refine, transform และยูเนียน

การประกอบและปรับแต่งสคีมา เป็นบทเรียน TypeScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน TypeScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน

สคีมาประกอบเข้าด้วยกันได้

สคีมา Zod เป็นองค์ประกอบพื้นฐานที่นำมาประกอบกันได้ คุณสามารถ refine, transform, extend และรวมสคีมาเหล่านี้เพื่อจำลองกฎการตรวจสอบที่ซับซ้อน

import { z } from "zod";
const base = z.object({ name: z.string() });
// We will add rules and combine schemas from here.

กฎที่กำหนดเองด้วย refine

.refine เพิ่มเพรดิเคตการตรวจสอบที่กำหนดเองพร้อมข้อความแสดงข้อผิดพลาด สำหรับกฎที่ Zod ไม่มีให้ในตัว

import { z } from "zod";
const password = z.string().refine(
  (s) => s.length >= 8,
  { message: "Must be at least 8 characters" }
);
// password.parse("short") throws with that message.

การปรับปรุงการตรวจสอบข้ามฟิลด์

ใช้ .refine กับออบเจ็กต์เพื่อตรวจสอบความสัมพันธ์ระหว่างฟิลด์ เช่น การตรวจว่ารหัสผ่านและการยืนยันรหัสผ่านตรงกัน

import { z } from "zod";
const form = z.object({
  password: z.string(),
  confirm: z.string()
}).refine((d) => d.password === d.confirm, {
  message: "Passwords must match"
});
// Validates both fields together.

การแปลงค่า

.transform แปลงค่าที่ผ่านการตรวจสอบแล้วให้เป็น shape อื่น โดยทำงานหลังจากการตรวจสอบสำเร็จ

import { z } from "zod";
const trimmed = z.string().transform((s) => s.trim());
const result = trimmed.parse("  hi  "); // "hi"

ฟิลด์เสริม

.optional() ทำให้ฟิลด์สามารถไม่มีค่าได้ ซึ่งสะท้อนอยู่ทั้งในการตรวจสอบและชนิดข้อมูลที่อนุมานได้

import { z } from "zod";
const schema = z.object({
  name: z.string(),
  bio: z.string().optional()
});
// bio may be omitted.

ค่า default

.default จะจัดหาค่าให้เมื่ออินพุตไม่มีค่า ดังนั้นผลลัพธ์ที่แยกวิเคราะห์แล้วจะมีฟิลด์นี้อยู่เสมอ

import { z } from "zod";
const schema = z.object({
  retries: z.number().default(3)
});
const r = schema.parse({}); // { retries: 3 }

สคีมายูเนียน

z.union ยอมรับค่าที่ตรงกับสคีมาใดสคีมาหนึ่งจากหลายสคีมา ซึ่งเทียบเท่ากับยูเนียนของ TypeScript ใน Zod

import { z } from "zod";
const id = z.union([z.string(), z.number()]);
// id.parse("abc") and id.parse(123) both succeed.

ยูเนียนแบบมีตัวแยกใน Zod

z.discriminatedUnion ตรวจสอบยูเนียนแบบมี tag ได้อย่างมีประสิทธิภาพ โดยเลือกตรวจสอบตามฟิลด์ตัวแยก

import { z } from "zod";
const shape = z.discriminatedUnion("kind", [
  z.object({ kind: z.literal("circle"), radius: z.number() }),
  z.object({ kind: z.literal("square"), side: z.number() })
]);
// Picks the right member by kind.

การรวมด้วย extend

.extend เพิ่มฟิลด์ลงในสคีมาของออบเจ็กต์ที่มีอยู่ ทำให้คุณสร้างสคีมาขนาดใหญ่จากสคีมาขนาดเล็กได้

import { z } from "zod";
const base = z.object({ id: z.number() });
const user = base.extend({ name: z.string() });
// user validates { id: number; name: string }

การรวมสคีมาของออบเจ็กต์

คุณยังสามารถรวมสคีมาของออบเจ็กต์สองตัวด้วย .merge เพื่อรวมฟิลด์ทั้งหมดให้เป็นสคีมาเดียว

import { z } from "zod";
const a = z.object({ x: z.number() });
const b = z.object({ y: z.string() });
const combined = a.merge(b);
// combined validates { x: number; y: string }

เชื่อมโยงทุกอย่างเข้าด้วยกัน

การปรับปรุง การแปลง ค่า default และส่วนขยายสามารถเชื่อมโยงกันได้อย่างลื่นไหล เพื่ออธิบายการตรวจสอบที่ซับซ้อนในสคีมาเดียวที่อ่านเข้าใจง่าย

import { z } from "zod";
const signup = z.object({
  email: z.string().refine(s => s.includes("@"), { message: "Invalid email" }),
  age: z.number().default(18)
}).extend({
  newsletter: z.boolean().optional()
});
// One schema, many rules.

แบบทดสอบสั้น ๆ: การประกอบสคีมา

ทดสอบความเข้าใจเกี่ยวกับการประกอบและการปรับปรุงสคีมา

สรุป: การประกอบและการปรับปรุงสคีมา

คุณได้เรียนรู้วิธีเพิ่มกฎที่กำหนดเองด้วย .refine ปรับรูปทรงค่าด้วย .transform จัดการข้อมูลที่หายไปด้วย .optional และ .default รวมทางเลือกด้วย z.union และขยายสคีมาด้วย .extend และ .merge

import { z } from "zod";
const schema = z.object({ name: z.string() })
  .extend({ age: z.number().default(0) })
  .refine(d => d.name.length > 0, { message: "Name required" });
// Composed validation in one place.

คำถามที่พบบ่อย

บทเรียน “การประกอบและปรับแต่งสคีมา” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การประกอบและปรับแต่งสคีมา” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส TypeScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การประกอบและปรับแต่งสคีมา”

สร้างสคีมาที่ซับซ้อนด้วย refine, transform และยูเนียน คุณปฏิบัติ TypeScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน TypeScript Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน TypeScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การประกอบและปรับแต่งสคีมา” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน TypeScript Academy นี้ได้ไหม

ได้ บทเรียน TypeScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. พื้นฐานสคีมา Zod
  2. การอนุมานชนิดข้อมูลจากสคีมา
  3. parse เทียบกับ safeParse
  4. การประกอบและปรับแต่งสคีมา
← กลับไปที่ TypeScript Academy