การประกอบและปรับแต่งสคีมา
สร้างสคีมาที่ซับซ้อนด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐานสคีมา Zod
- การอนุมานชนิดข้อมูลจากสคีมา
- parse เทียบกับ safeParse
- การประกอบและปรับแต่งสคีมา