Zod Nedir? Modern Uygulamalar için Tip-Güvenli Validation
Zod ile TypeScript tipinden runtime validation üretin. Schema tanımlama, parse, safeParse, type inference ve React Hook Form entegrasyonu.
Zod, TypeScript-first bir schema validation kütüphanesidir. Bir kez schema yazdığınızda hem tipinizi hem runtime kontrolünüzü aynı yerden alırsınız; bu da form, API gövdesi, environment variable gibi tüm 'güvenilmez' verileri tek bir tutarlı şekilde doğrulamanızı sağlar. Bu rehberde infografikteki bölümleri açarak basit schema'lardan refinement'e ve React Hook Form entegrasyonuna kadar tüm akışı ele alıyoruz.
Zod Nedir?
TypeScript-first bir schema validation kütüphanesidir. Hem tip güvenliği (compile time) hem de güvenilebilir runtime kontrolü sağlar. API yanıtları, formlar, env değişkenleri için tek bir doğrulama dili sunar.
- TypeScript-first schema validation
- Runtime tip güvenliği
- Güvenilen tip sistemi
Neden Zod?
Zod'un birçok diğer kütüphaneye olan üstünlükleri:
- Tip-güvenli runtime validation
- Kolay schema tanımı
- Yardımcı tip çıkarımı (z.infer)
- Sıfır bağımlılık (zero-dep)
- Aktif ve hızlı büyüyen ekosistem
Kurulum
Tek paket; runtime bağımlılığı olarak kurulur.
npm install zodTemel Schema
z.object ile bir schema tanımlarsınız. Her alan için z.string(), z.number(), z.boolean() gibi yardımcılar vardır.
import { z } from "zod";
const UserSchema = z.object({
name: z.string(),
age: z.number(),
email: z.string().email(),
});Parse & Validation
schema.parse(data) veriyi doğrular; hata varsa exception fırlatır. Başarılıysa tip-güvenli sonucu döndürür.
const data = UserSchema.parse({
name: "Ada",
age: 30,
email: "ada@dev.com",
});
// data: { name: string; age: number; email: string }Safe Parse (ÖNEMLİ)
safeParse exception fırlatmadan { success, data | error } döner. Hatayı try/catch yerine if/else ile ele almak istediğinizde kullanışlıdır.
const result = UserSchema.safeParse(input);
if (result.success) {
console.log(result.data);
} else {
console.error(result.error.format());
}Type Inference (Anahtar Özellik)
z.infer<typeof Schema> ile schema'dan TypeScript tipini otomatik çıkarırsınız. Schema tek doğru kaynak haline gelir; ayrıca tip yazmanız gerekmez.
type User = z.infer<typeof UserSchema>;
// { name: string; age: number; email: string }İleri Validation
Zod string ve number için zincirlenebilir kurallar sunar: min, max, regex, email, url, uuid, length…
z.string().min(3).max(20);
z.string().email();
z.string().regex(/^[a-z]+$/i);
z.number().int().positive();Refinement (Custom Rules)
Standart kuralların yetmediği yerde refine ile özel kontrol fonksiyonu eklersiniz. Ek olarak superRefine ve transform ile veriyi dönüştürebilir, çapraz alan kuralları yazabilirsiniz.
z.string().refine((val) => val !== "test", {
message: "Test değerine izin yok",
});Nested Schemas
Schema'lar iç içe olabilir; obje içinde obje, dizi, dizi içinde obje vb. yapıları rahatça modelleyebilirsiniz.
const PostSchema = z.object({
title: z.string(),
author: z.object({
name: z.string(),
email: z.string().email(),
}),
tags: z.array(z.string()),
});React Hook Form ile Kullanım (ÖNEMLİ)
@hookform/resolvers/zod ile RHF'ye Zod schema'yı resolver olarak verirsiniz; tüm validation Zod tarafından yapılır ve tipler otomatik çıkar.
import { zodResolver } from "@hookform/resolvers/zod";
import { useForm } from "react-hook-form";
const schema = z.object({
email: z.string().email(),
password: z.string().min(8),
});
const { register, handleSubmit } = useForm({
resolver: zodResolver(schema),
});Temel Kavramlar
Zod ile çalışırken sürekli kullanacağınız parçalar:
- schema — z.object, z.string, z.number…
- parse / safeParse — runtime kontrol
- z.infer — schema'dan tip çıkarma
- refine / superRefine — custom kurallar
- transform — veriyi dönüştürme
Kullanım Alanları
Zod'un en sık tercih edildiği yerler:
- Form validation (RHF + Zod)
- API request/response parsing
- Environment variable doğrulaması
- tRPC ve Zod-tabanlı SDK'lar
- Backend payload validation
Özet
Zod; tek bir schema'dan hem güçlü TypeScript tipleri hem güvenilir runtime validation üretir. Daha güvenli kod yazmanızı sağlar, code generation gerektirmez ve modern stack'lerin hemen her katmanına uyar — formlar, API'ler, env'ler. Tek bir komutla başlayıp tüm validation katmanını birleştirebilirsiniz.
Sıkça Sorulan Sorular
Bu konuda en çok merak edilenler.
Zod, Yup'tan ne kadar farklı?
Yup eski ve JavaScript-first kökenlidir. Zod baştan TypeScript-first tasarlandığı için tip çıkarımı çok daha güçlüdür. Yup hâlâ olgun ama yeni projelerde Zod tercih ediliyor.
Bundle boyutu nasıl?
Zod ~12 kB gzip civarındadır. Tree-shaking ile yalnızca kullandığınız parçalar dahil olur. Performans hassas ortamlar için Valibot gibi daha hafif alternatifler de var.
tRPC ile birlikte mi kullanılır?
Evet — tRPC, input/output şemalarını Zod ile tanımlamayı tercih eder. Schema'dan hem server hem client tipleri otomatik üretilir; uçtan uca tip güvenliği sağlanır.
Server-side validation için yeterli mi?
Evet. Next.js API Routes, Node.js, Bun veya Deno fark etmez — payload'ları Zod ile parse ederek kötü/eksik girdileri ilk kapıda yakalayabilirsiniz.
transform ne işe yarar?
Validation sırasında veriyi dönüştürür: "42" → 42, trim, lowercase, default değer atama gibi işlemler için kullanılır. Schema'nın çıktı tipi de buna göre güncellenir.
İlgili İçerikler
Bu konuyla bağlantılı diğer infografikler.
- ToolsFrontend
Vite Nedir? Yeni Nesil Frontend Geliştirme Aracı
Vite ile native ESM tabanlı, anında başlayan dev server ve şimşek hızında HMR. Kurulum, plugin sistemi, production build ve Webpack ile karşılaştırma.
- FrontendTools
Axios Nedir? Modern Uygulamalar için Pratik HTTP İstemcisi
Axios ile fetch'ten daha güçlü, Promise-based HTTP istekleri yapın. Interceptor, instance, hata yönetimi ve query params kullanım rehberi.
- ReactFrontend
React Query Nedir? Axios ve TypeScript ile Mutation Rehberi
React Query (TanStack Query) ile Axios baseURL ayarı, login mutation, create user ve update user hook'larını TypeScript ile kurun.
Daha fazla developer infografiği keşfedin
Yeni içerikleri kaçırmamak için ana sayfayı ziyaret edin.
Tüm infografikleri gör