2025-06-13
Zod: TypeScript'in Eksik Çalışma Zamanı Doğrulama Katmanı
TypeScript tipleri çalışma zamanında yok olur. Zod onları geri getirir — ve yalnızca kontrol etmez, ayrıştırır. İşte her TypeScript API istemcisinin neden kullanması gerektiği.
TypeScript Yanılsaması
TypeScript size derleme zamanında güven verir. Ancak veri bir ağ sınırını geçtiği anda bu güven buharlaşır. TypeScript tipleriniz bir söz, garanti değildir.
const user = response.data as User; // 🙏 hope it matches
Bu as dönüşümü bir yalandır. API zorunlu bir alan için null döndürürse TypeScript sizi kurtarmaz.
Zod: Doğrulama Değil, Ayrıştırma
Zod'un arkasındaki temel içgörü, doğrulama (kontrol etme) ile ayrıştırma (dönüştürme) arasındaki ayrımdır:
const UserSchema = z.object({
id: z.number().int(),
name: z.string(),
email: z.string().email(),
});
// Throws ZodError with detailed path if invalid
const user = UserSchema.parse(response.data);
// user is now typed as { id: number; name: string; email: string }
// TypeScript KNOWS this is valid — no cast needed
parse()'den sonra TypeScript doğru tipi çıkarır. Ayrı bir tip tanımına ihtiyacınız yok — z.infer<typeof UserSchema> size onu ücretsiz verir.
JSON'dan Zod Schema'ları Oluşturma
Başlamanın en hızlı yolu, gerçek bir API yanıtını dönüştürücümüze yapıştırmaktır. İç içe nesne schema'ları, dizi tipleri ve z.infer tip dışa aktarmaları ile eksiksiz bir Zod schema'sı elde edersiniz — projenize doğrudan eklenmeye hazır.
Yardımcı Hata Mesajları
Zod'un hata mesajları cerrahi hassasiyettedir:
ZodError: [
{ path: ["address", "zip"], message: "Expected string, received number" }
]
Bunu, iki çağrı çerçevesi sonra render kodunuzda bir yerde bulunan "Cannot read properties of undefined" ile karşılaştırın.
Zod ve JSON Schema Karşılaştırması
| Zod | JSON Schema | |
|---|---|---|
| Çalışma zamanı | Node/browser | Her dil |
| Tip çıkarımı | Otomatik | Manuel |
| Bundle boyutu | ~12KB | değişken |
| Ekosistem | TypeScript-only | Evrensel |
Zod'u TypeScript uygulamanızın içinde kullanın. JSON Schema'yı diller arası API sözleşmeleri ve OpenAPI dokümantasyonu için kullanın.