Validasi skema dengan zod & inferensi ke TS
Validasi permintaan dengan zod; simpulkan tipe TypeScript dari skema; tambahkan middleware dan penanganan kesalahan yang aman.
Validasi skema dengan zod & inferensi ke TS adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 3. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar TypeScript Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus TypeScript Academy mencakup 3 pelajaran total.
Pendahuluan
Tujuan: Validasi data masuk dengan zod dan jaga agar tipe TypeScript tetap selaras melalui z.infer. Anda akan mengurai data dengan aman, mengirim kesalahan yang membantu, dan memasukkan validasi ke middleware.
- Definisikan skema sekali
- Inferensikan tipe TS
- safeParse + kesalahan 400
Skema dan inferensi
Modelkan sekali dengan zod. type User = z.infer<typeof userSchema> yang diturunkan mencerminkan validasi secara tepat.
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 testssafeParse dalam penangan
Gunakan safeParse untuk menghindari pengecualian; kembalikan 400 dengan masalah yang telah diformat. Tipe respons mencerminkan bentuk keberhasilan dan kesalahan.
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)
}Pembantu middleware
Buat middleware yang dapat digunakan kembali. Middleware tersebut mengurai isi dan menyematkan data bertipe atau mengembalikan 400 dengan detail.
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()
}
}Koersi & refine
Gunakan z.coerce untuk menerima angka berbentuk string, z.enum untuk nilai yang telah diketahui, dan .refine untuk aturan lintas kolom.
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 rulesKiat kesalahan
Kiat kesalahan:
- Selalu gunakan
safeParsedi titik terluar. - Format masalah untuk klien; hindari membocorkan jejak tumpukan.
- Persempit
unknownmenjadiZodErrorjika Anda menangkap hasil parse yang dilempar.
Pemeriksaan inferensi zod
Pemeriksaan singkat: Bagaimana Anda menjaga agar tipe TS tetap selaras dengan skema zod?
Ringkasan
Ringkasan: Tentukan satu skema, simpulkan tipe TS, validasi dengan safeParse, lalu pasangkan ke perangkat tengah agar kesalahan 400 konsisten.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Validasi skema dengan zod & inferensi ke TS” gratis?
Ya — teks lengkap “Validasi skema dengan zod & inferensi ke TS” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus TypeScript Academy, upgrade ke CoddyKit PRO. Kursus TypeScript Academy mencakup 3 pelajaran total.
Apa yang akan aku pelajari di “Validasi skema dengan zod & inferensi ke TS”?
Validasi permintaan dengan zod; simpulkan tipe TypeScript dari skema; tambahkan middleware dan penanganan kesalahan yang aman. Kamu berlatih TypeScript Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai TypeScript Academy?
Tidak diperlukan pengalaman sebelumnya. TypeScript Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 3.
Berapa lama pelajaran “Validasi skema dengan zod & inferensi ke TS” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran TypeScript Academy ini?
Ya. Setiap pelajaran TypeScript Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Penangan rute Router, pengetikan Request/Response
- Validasi skema dengan zod & inferensi ke TS
- Middleware kesalahan & tipe hasil