parse เทียบกับ safeParse
จัดการผลสำเร็จและล้มเหลวของการตรวจสอบอย่างเหมาะสม
parse เทียบกับ safeParse เป็นบทเรียน TypeScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน TypeScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน
สองวิธีในการตรวจสอบ
Zod มีเมธอดตรวจสอบสองแบบ ได้แก่ parse ซึ่งจะแจ้งข้อผิดพลาดเมื่อข้อมูลไม่ถูกต้อง และ safeParse ซึ่งจะคืนออบเจ็กต์ผลลัพธ์แทน
import { z } from "zod";
const schema = z.string();
// schema.parse(x) throws on failure
// schema.safeParse(x) returns { success, ... }parse แจ้งข้อผิดพลาดเมื่อข้อมูลไม่ถูกต้อง
parse จะคืนค่าที่ตรวจสอบแล้วเมื่อสำเร็จ และแจ้ง ZodError เมื่อไม่สำเร็จ จึงเหมาะเมื่อข้อมูลที่ไม่ถูกต้องถือเป็นกรณีผิดปกติอย่างแท้จริง
import { z } from "zod";
const schema = z.number();
const ok = schema.parse(42); // 42
// schema.parse("nope"); // throws ZodErrorการดักจับข้อผิดพลาดจาก Parse
ห่อ parse ไว้ใน try/catch เพื่อจัดการข้อผิดพลาดที่ถูกแจ้ง แล้วตรวจสอบรายละเอียดว่าเกิดความล้มเหลวที่จุดใด
import { z } from "zod";
const schema = z.number();
try {
schema.parse("nope");
} catch (err) {
if (err instanceof z.ZodError) {
console.log("Invalid:", err.issues.length);
}
}safeParse คืนผลลัพธ์
safeParse จะไม่แจ้งข้อผิดพลาด แต่จะคืนออบเจ็กต์ที่มี success: true และ data หรือ success: false และ error
import { z } from "zod";
const schema = z.number();
const result = schema.safeParse("nope");
// result is { success: false, error: ZodError }การจำกัดชนิดของผลลัพธ์
ผลลัพธ์เป็นยูเนียนแบบมีตัวแยกตามค่า success การตรวจสอบค่านี้จะจำกัดผลลัพธ์ให้เหลือ data หรือ error อย่างใดอย่างหนึ่ง
import { z } from "zod";
const schema = z.object({ id: z.number() });
const result = schema.safeParse({ id: 1 });
if (result.success) {
console.log(result.data.id); // typed
} else {
console.log(result.error.issues);
}ควรใช้ parse เมื่อใด
ใช้ parse เมื่ออินพุตที่ไม่ถูกต้องเป็นข้อผิดพลาดของโปรแกรมหรือควรทำให้การดำเนินการยุติลง เช่น การอ่าน config ที่จำเป็นเมื่อเริ่มต้นโปรแกรม
import { z } from "zod";
const configSchema = z.object({ port: z.number() });
const config = configSchema.parse({ port: 8080 });
// Fail fast if config is wrong.ควรใช้ safeParse เมื่อใด
ใช้ safeParse เมื่อคาดว่าอินพุตอาจไม่ถูกต้องและคุณต้องการจัดการอย่างเหมาะสม เช่น การตรวจสอบข้อมูลที่ส่งจากฟอร์มของผู้ใช้
import { z } from "zod";
const formSchema = z.object({ email: z.string() });
const r = formSchema.safeParse({ email: 123 });
if (!r.success) {
// Show a friendly validation message
}การอ่านปัญหาจาก ZodError
ZodError มีอาร์เรย์ issues ที่อธิบายปัญหาแต่ละรายการ ได้แก่ เส้นทาง ข้อความ และรหัสข้อผิดพลาด
import { z } from "zod";
const schema = z.object({ age: z.number() });
const r = schema.safeParse({ age: "x" });
if (!r.success) {
for (const issue of r.error.issues) {
console.log(issue.path, issue.message);
}
}ทั้งสองแบบคืนชนิดข้อมูลที่อนุมานได้
เมื่อสำเร็จ เมธอดทั้งสองจะแจ้งค่าที่ตรวจสอบแล้วซึ่งมีชนิดข้อมูลเป็น z.infer<typeof schema> ดังนั้นโค้ดส่วนถัดไปจึงมีชนิดข้อมูลครบถ้วน
import { z } from "zod";
const userSchema = z.object({ name: z.string() });
type User = z.infer<typeof userSchema>;
const u: User = userSchema.parse({ name: "Ada" });
console.log(u.name);การเลือกเมธอดที่เหมาะสม
หลักง่าย ๆ คือใช้ parse กับเส้นทางการทำงานที่เชื่อถือได้หรือมีความสำคัญ ซึ่งความล้มเหลวควรหยุดการทำงาน และใช้ safeParse กับอินพุตที่ไม่เชื่อถือได้ซึ่งต้องจัดการโดยไม่ทำให้โปรแกรมหยุดทำงาน
import { z } from "zod";
const schema = z.string();
// Critical: schema.parse(value)
// User-facing: schema.safeParse(value)การผสานรูปแบบทั้งสอง
รูปแบบที่พบได้บ่อยคือห่อ safeParse ไว้ในฟังก์ชันช่วยเหลือที่คืนข้อมูลซึ่งมีชนิดข้อมูลครบถ้วนหรือข้อผิดพลาดที่จัดรูปแบบแล้ว ทำให้ได้ความสะดวกของทั้งสองเมธอด
import { z } from "zod";
function validate<T extends z.ZodType>(schema: T, value: unknown) {
const r = schema.safeParse(value);
return r.success ? { ok: true, data: r.data } : { ok: false, error: r.error };
}
// Reusable, no throwing.แบบทดสอบสั้น ๆ: parse กับ safeParse
ทดสอบความเข้าใจเกี่ยวกับ parse และ safeParse
สรุป: parse กับ safeParse
คุณได้เรียนรู้ว่า parse จะแจ้งข้อผิดพลาดเมื่อข้อมูลไม่ถูกต้อง ขณะที่ safeParse จะคืนผลลัพธ์แบบ success/error รวมถึงได้เรียนรู้ว่าแต่ละแบบควรใช้เมื่อใดและวิธีอ่านปัญหาจาก ZodError
import { z } from "zod";
const schema = z.object({ id: z.number() });
const r = schema.safeParse({ id: 1 });
if (r.success) console.log(r.data.id);คำถามที่พบบ่อย
บทเรียน “parse เทียบกับ safeParse” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “parse เทียบกับ safeParse” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส TypeScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “parse เทียบกับ safeParse”
จัดการผลสำเร็จและล้มเหลวของการตรวจสอบอย่างเหมาะสม คุณปฏิบัติ TypeScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน TypeScript Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน TypeScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “parse เทียบกับ safeParse” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน TypeScript Academy นี้ได้ไหม
ได้ บทเรียน TypeScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐานสคีมา Zod
- การอนุมานชนิดข้อมูลจากสคีมา
- parse เทียบกับ safeParse
- การประกอบและปรับแต่งสคีมา