Mengapa Memilih Zod
Sebelum mulai praktik, ada baiknya kita memahami terlebih dahulu apa saja yang membuat Zod menarik untuk digunakan.
TypeScript-First
Zod dirancang sejak awal untuk TypeScript. Kita menulis schema sekali, lalu tipenya otomatis dapat diturunkan. Dengan demikian, kita tidak perlu memelihara dua hal sekaligus, satu tipe untuk TypeScript dan satu schema untuk validasi.
import { z } from 'zod';
const userSchema = z.object({
name: z.string(),
age: z.number(),
});
type User = z.infer<typeof userSchema>;
// type User = { name: string; age: number }Dengan seperti ini, kita mendapatkan dua keuntungan sekaligus dari satu sumber kebenaran, yaitu validasi runtime dan tipe compile-time.
API yang Chainable dan Mudah Dibaca
API Zod ditulis dengan gaya fluent dan mudah dibaca. Kita dapat merangkai method untuk menambahkan constraint:
const usernameSchema = z
.string()
.min(3)
.max(20)
.regex(/^[a-z0-9_]+$/);Sekali baca, kita sudah memahami maksudnya, yaitu sebuah string dengan panjang minimal 3 karakter, maksimal 20 karakter, dan hanya boleh berisi huruf kecil, angka, serta underscore.
Error yang Informatif
Apabila validasi gagal, Zod mengembalikan sebuah object error yang sangat detail. Kita dapat mengetahui field mana yang gagal, alasannya apa, dan path-nya berada di mana ketika schema-nya bersifat nested atau kompleks.
import { z } from 'zod';
const userSchema = z.object({
name: z.string(),
age: z.number(),
});
const result = userSchema.safeParse({
name: 'Nauval',
age: 'dua puluh',
});
if (!result.success) {
console.log(result.error.issues);
}Pada modul Validasi Lanjutan, kita akan belajar memformat error ini agar mudah ditampilkan di antarmuka.
Composable
Schema di Zod dapat dikomposisi. Kita dapat membuat schema kecil, kemudian di-extend atau diturunkan menjadi schema lain. Hal ini yang membuat Zod cocok digunakan pada proyek dengan skala besar. Kita tidak perlu menduplikasi schema, melainkan menurunkan dari schema yang sudah ada.
const userSchema = z.object({
id: z.uuid(),
name: z.string(),
email: z.email(),
password: z.string(),
});
// Versi publik tanpa password
const userPublicSchema = userSchema.omit({ password: true });
// Versi update, semua field opsional
const updateUserSchema = userSchema.partial();Dari satu base schema, kita mendapatkan banyak varian untuk berbagai kebutuhan, tanpa duplikasi.
Keunggulan Lainnya
Selain hal-hal di atas, Zod juga memiliki beberapa keunggulan lain yang patut disebutkan:
- Ringan: Zod v4 sudah jauh lebih ramping dibandingkan v3, bundle size-nya cukup nyaman digunakan di sisi client
- Tanpa dependensi: tidak memerlukan library lain untuk dipasang
- Ekosistem yang luas: tersedia adapter untuk React Hook Form, tRPC, Drizzle, dan banyak alat lain yang biasa digunakan dalam pengembangan sehari-hari
Singkatnya, apabila kita menulis TypeScript dan membutuhkan validasi pada saat runtime, Zod menjadi salah satu pilihan paling solid yang tersedia saat ini.
Diskusi
0 komentarBelum ada komentar.
Mulai diskusi