İçeriğe atla
devcards.space
FrontendTools

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.

8 dakika okuma
Zod infografiği: TypeScript-first schema validation, parse/safeParse, type inference ve React Hook Form ile kullanımını gösteren genel bakış

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.

bash
npm install zod

Temel 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.

ts
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.

ts
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.

ts
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.

ts
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…

ts
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.

ts
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.

ts
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.

tsx
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.

Bu konuyla bağlantılı diğer infografikler.

Daha fazla developer infografiği keşfedin

Yeni içerikleri kaçırmamak için ana sayfayı ziyaret edin.

Tüm infografikleri gör