การอนุมานชนิดข้อมูลจากสคีมา
อนุมานชนิดข้อมูลแบบคงที่โดยตรงจากสคีมา Zod
การอนุมานชนิดข้อมูลจากสคีมา เป็นบทเรียน TypeScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน TypeScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน
สคีมามีข้อมูลชนิดข้อมูล
สคีมา Zod ทราบชนิดข้อมูล TypeScript ที่สคีมานั้นใช้ตรวจสอบ z.infer จะแยกชนิดข้อมูลนั้นออกมา ทำให้คุณเขียน shape เพียง ครั้งเดียว
import { z } from "zod";
const userSchema = z.object({ name: z.string(), age: z.number() });
type User = z.infer<typeof userSchema>;
// User is { name: string; age: number }ยูทิลิตี z.infer
z.infer<typeof schema> สร้างชนิดข้อมูลแบบคงที่ที่สคีมาใช้ตรวจสอบ โปรดสังเกต typeof เพราะคุณส่งค่าของสคีมาเข้าไป
import { z } from "zod";
const tagSchema = z.array(z.string());
type Tags = z.infer<typeof tagSchema>; // string[]แหล่งข้อมูลจริงเพียงแหล่งเดียว
หากไม่มีการอนุมาน คุณจะต้องดูแลชนิดข้อมูลและสคีมาแยกจากกัน และทั้งสองอย่างอาจไม่ตรงกันได้ z.infer ทำให้ทั้งคู่สอดคล้องกันอย่างสมบูรณ์
import { z } from "zod";
const schema = z.object({ id: z.number(), email: z.string() });
type Account = z.infer<typeof schema>;
// Change the schema, the type updates automatically.การอนุมานชนิดข้อมูลแบบซ้อน
การอนุมานรองรับออบเจ็กต์และอาร์เรย์แบบซ้อน โดยสร้างชนิดข้อมูล TypeScript แบบซ้อนทั้งหมดจากสคีมาเพียงหนึ่งตัว
import { z } from "zod";
const postSchema = z.object({
title: z.string(),
author: z.object({ name: z.string() }),
tags: z.array(z.string())
});
type Post = z.infer<typeof postSchema>;
// Post.author.name is stringการใช้ชนิดข้อมูลที่อนุมานได้
ใช้ชนิดข้อมูลที่อนุมานได้ในทุกที่ที่คุณจะใช้ชนิดข้อมูลที่เขียนขึ้นเอง เช่น พารามิเตอร์ฟังก์ชัน ตัวแปร และชนิดข้อมูลผลลัพธ์
import { z } from "zod";
const userSchema = z.object({ name: z.string(), age: z.number() });
type User = z.infer<typeof userSchema>;
function greet(u: User): string {
return "Hi " + u.name;
}Parse คืนชนิดข้อมูลที่อนุมานได้
schema.parse จะคืนค่าที่มีชนิดข้อมูลเป็นชนิดข้อมูลที่อนุมานได้อยู่แล้ว ดังนั้นโค้ดส่วนถัดไปจึงมีชนิดข้อมูลครบถ้วน
import { z } from "zod";
const userSchema = z.object({ name: z.string(), age: z.number() });
type User = z.infer<typeof userSchema>;
const raw: unknown = { name: "Ada", age: 36 };
const user: User = userSchema.parse(raw); // typed and validatedค่าเสริมและค่า nullable ในชนิดข้อมูล
ตัวแก้ไขสคีมาจะส่งต่อไปยังชนิดข้อมูลที่อนุมานได้ ฟิลด์ .optional() จะกลายเป็นฟิลด์เสริมใน TypeScript
import { z } from "zod";
const schema = z.object({
name: z.string(),
nickname: z.string().optional()
});
type P = z.infer<typeof schema>;
// P is { name: string; nickname?: string }การอนุมานจากอาร์เรย์ของออบเจ็กต์
รวม z.array และ z.object เข้าด้วยกัน แล้วชนิดข้อมูลที่อนุมานได้จะเป็นอาร์เรย์ของชนิดข้อมูลออบเจ็กต์
import { z } from "zod";
const usersSchema = z.array(z.object({ id: z.number() }));
type Users = z.infer<typeof usersSchema>;
// Users is { id: number }[]เหตุใดจึงต้องใช้ typeof
สคีมาคือค่า ดังนั้นคุณต้องอ้างอิงชนิดข้อมูลของสคีมาด้วย typeof schema ก่อนส่งให้ z.infer
import { z } from "zod";
const s = z.string();
type S = z.infer<typeof s>; // string
// z.infer<s> would be wrong: s is a value, not a type.การอนุมานข้ามขอบเขตของโมดูล
ส่งออกทั้งสคีมาและชนิดข้อมูลที่อนุมานได้ เพื่อให้โมดูลอื่นตรวจสอบและใช้ shape เดียวกันได้อย่างสอดคล้อง
import { z } from "zod";
export const userSchema = z.object({ name: z.string() });
export type User = z.infer<typeof userSchema>;
// Consumers import both the runtime schema and the type.คำจำกัดความเดียว สองโลก
สคีมาทำหน้าที่ตรวจสอบระหว่างการทำงาน ส่วน z.infer ทำหน้าที่กำหนดชนิดข้อมูลขณะคอมไพล์ การประกาศเพียงครั้งเดียวจึงรองรับทั้งสองด้านและกำจัดการทำซ้ำ
import { z } from "zod";
const configSchema = z.object({ port: z.number(), host: z.string() });
type Config = z.infer<typeof configSchema>;
// Validate at runtime, type at compile time, no drift.แบบทดสอบสั้น ๆ: การอนุมานชนิดข้อมูล
ทดสอบความเข้าใจเกี่ยวกับการอนุมานชนิดข้อมูลจากสคีมา
สรุป: การอนุมานชนิดข้อมูลจากสคีมา
คุณได้เรียนรู้ว่า z.infer<typeof schema> ใช้สร้างชนิดข้อมูล TypeScript จากสคีมา Zod ทำให้มีแหล่งข้อมูลจริงเพียงแหล่งเดียวสำหรับการตรวจสอบและชนิดข้อมูล รวมถึง shape แบบซ้อน แบบเสริม และแบบอาร์เรย์
import { z } from "zod";
const userSchema = z.object({ name: z.string(), age: z.number() });
type User = z.infer<typeof userSchema>;
// User stays in sync with the schema automatically.คำถามที่พบบ่อย
บทเรียน “การอนุมานชนิดข้อมูลจากสคีมา” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การอนุมานชนิดข้อมูลจากสคีมา” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส TypeScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การอนุมานชนิดข้อมูลจากสคีมา”
อนุมานชนิดข้อมูลแบบคงที่โดยตรงจากสคีมา Zod คุณปฏิบัติ TypeScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน TypeScript Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน TypeScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การอนุมานชนิดข้อมูลจากสคีมา” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน TypeScript Academy นี้ได้ไหม
ได้ บทเรียน TypeScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐานสคีมา Zod
- การอนุมานชนิดข้อมูลจากสคีมา
- parse เทียบกับ safeParse
- การประกอบและปรับแต่งสคีมา