0Pricing
TypeScript Academy · Pelajaran

Skema zod/valibot + inferensi

Validasi data yang tidak tepercaya dengan skema; inferensikan tipe TS langsung dari validator; bandingkan zod dan valibot; hubungkan dengan handler.

Skema zod/valibot + inferensi adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 2. 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 2 pelajaran total.

Pengantar

Tujuan: Perlakukan input eksternal sebagai unknown, validasi dengan skema, dan inferensikan tipe TS dari skema tersebut. Anda akan menggunakan zod, melihat sintaks valibot, dan membuat pembantu kecil untuk handler.

  • Satu sumber kebenaran
  • safeParse vs parse
  • Gunakan kembali tipe hasil inferensi

Inferensi zod

Tentukan skema satu kali. type User = z.infer<typeof userSchema> mencerminkan aturan validasi secara tepat.

import { z } from "zod"

export const userSchema = z.object({
  id: z.string().uuid(),
  name: z.string().min(1),
  age: z.number().int().min(0).optional()
})

export type User = z.infer<typeof userSchema>

// User is kept in sync with runtime rules.

safeParse vs parse

safeParse memberikan hasil berhasil/gagal tanpa melemparkan error, sehingga cocok untuk handler HTTP; parse melemparkan error jika input tidak valid.

import type { Request, Response } from "express"
import { userSchema, type User } from "./schema"

export function createUser(req: Request, res: Response<User | { error: string; issues?: unknown }>) {
  const r = userSchema.safeParse(req.body)
  if (!r.success) {
    return res.status(400).json({ error: "Invalid body", issues: r.error.format() })
  }
  const user = r.data
  return res.status(201).json(user)
}

// parse() throws; safeParse() returns a discriminated union

Inferensi valibot

valibot menyediakan validator ringkas dengan Infer<typeof schema>. Pilih satu pustaka dan standarkan penggunaannya di seluruh tim.

import { object, string, number, optional, minLength, uuid, minValue } from "valibot"
import type { Infer } from "valibot"

export const VUser = object({
  id: string([uuid()]),
  name: string([minLength(1)]),
  age: optional(number([minValue(0)]))
})

export type VUserT = Infer<typeof VUser>

// Similar idea: one schema, inferred type.

Pembantu validasi

Bungkus parsing dalam pembantu kecil agar handler mendapatkan struktur sederhana { ok,data } atau { ok:false,issues }.

import { ZodTypeAny } from "zod"

export function validate<T extends ZodTypeAny, Out = unknown>(schema: T, value: unknown, onError?: (issues: unknown) => never | void): { ok: true; data: Out } | { ok: false; issues: unknown } {
  const r = schema.safeParse(value)
  if (!r.success) {
    const issues = r.error.format()
    if (onError) onError(issues as unknown as never)
    return { ok: false, issues }
  }
  return { ok: true, data: r.data as unknown as Out }
}

Kiat

Kiat:

  • Tempatkan skema dekat batas sistem (HTTP, CLI, IO basis data).
  • Inferensikan tipe dan ekspor tipe tersebut—hindari duplikat yang ditulis secara manual.
  • Kembalikan 400 dengan detail masalah; jangan pernah mempercayai input klien.

Pemeriksaan manfaat inferensi

Pemeriksaan singkat: Mengapa tipe perlu diinferensikan dari skema?

Ringkasan

Ringkasan: Validasi input unknown dengan zod/valibot, gunakan safeParse, dan inferensikan tipe agar tipe saat kompilasi dan saat runtime tetap selaras.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Skema zod/valibot + inferensi” gratis?

Ya — teks lengkap “Skema zod/valibot + inferensi” 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 2 pelajaran total.

Apa yang akan aku pelajari di “Skema zod/valibot + inferensi”?

Validasi data yang tidak tepercaya dengan skema; inferensikan tipe TS langsung dari validator; bandingkan zod dan valibot; hubungkan dengan handler. 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 1 dari 2.

Berapa lama pelajaran “Skema zod/valibot + inferensi” 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

  1. Skema zod/valibot + inferensi
  2. Parsing defensif dan amplop galat
← Kembali ke TypeScript Academy