---
title: "TypeScript'te Şema Kütüphanesi Kullanmadan `unknown` Değerleri Nasıl Doğrularsınız? 🛡️"
url: https://blog.edumints.com/typescript-te-sema-kutuphanesi-kullanmadan-unknown-degerleri-nasil
category: "Web"
date: 2026-10-17T15:05:53.074Z
publisher: Edumints Blog
lang: tr-TR
source_name: "dev.to"
source_url: https://dev.to/nyaomaru/how-do-you-validate-unknown-in-typescript-without-a-schema-library-1a11
---

# TypeScript'te Şema Kütüphanesi Kullanmadan `unknown` Değerleri Nasıl Doğrularsınız? 🛡️

TypeScript ile geliştirme yaparken dış dünyadan gelen verileri güvenli bir şekilde işlemek en temel mühendislik problemlerinden biridir. Bir değer şu kaynaklardan gelebilir:

- Bir API yanıtı
- `JSON.parse` çıktısı
- Local storage (yerel depolama)
- Bir mesaj yükü (message payload)
- Üçüncü parti kodlar

Bu veriyi doğrulamadan önce tipi `declare const input: unknown;` olmalıdır. Peki bu `unknown` tipini her seferinde ağır bir şema kütüphanesi kullanmadan nasıl güvenli ve kullanışlı hale getirebiliriz?

## 🧱 `unknown` Görevini Yapıyor

`input.name` şeklinde bir özelliğe doğrudan erişmeye çalıştığımızda TypeScript hata verir. İlk başta can sıkıcı görünse de TypeScript bize çok önemli bir şey söyler: **Elimizde bir değer var ama henüz ne olduğunu bilmiyoruz.**

Güvenilmeyen sınır (boundary) değerleri tam olarak bu anlama gelmelidir. Bir HTTP yanıtı veya ayrıştırılmış bir JSON, sırf uygulamamız öyle bekliyor diye otomatik olarak `User` tipine dönüşmez. `unknown`, eksik tip bilgisi değil; henüz doğrulamadığımız bir değerin dürüst tanımıdır. Asıl mesele `unknown` değil, güveni nasıl inşa ettiğimizdir.

## 😈 Kolay Kaçış Yolu: `as User`

En kısa kaçış yolu tip zorlaması (type assertion) kullanmaktır:

```typescript
type User = { id: string; name: string; };
declare const input: unknown;
const user = input as User;
user.name.toUpperCase();
```

Derleyici artık mutludur ancak çalışma zamanında (runtime) **hiçbir şey kontrol edilmemiştir**. Eğer `name` alanına `123` gibi bir sayı gelirse, `user.name.toUpperCase()` çağrısı çalışma zamanında patlar (💥 Runtime error). `as User` yalnızca derleyicinin neye inandığını değiştirir; çalışma zamanı değerini denetlemez veya eksik özellikleri eklemez. Çalışma zamanı güvenliği önemliyse, tip zorlaması bir doğrulama değildir.

## 🛡️ Tip Muhafızları (Type Guards) Çalışma Zamanı ile TypeScript'i Bağlar

Ağır şema kütüphaneleri yerine `is-kit` gibi hafif araçlarla küçük ve birleştirilebilir tip muhafızları (type guards) oluşturabiliriz:

```typescript
import { isString, oneOfValues, struct } from "is-kit";

const isUser = struct({
  id: isString,
  name: isString,
  role: oneOfValues("admin", "member"),
});
```

Artık `unknown` değeri doğrudan `if (isUser(input))` kontrolünden geçirebiliriz. Bu yaklaşım aynı anda iki işi birden yapar:

- **Çalışma zamanı (Runtime)** → Bu değer gerçekten beklenen yapıyla eşleşiyor mu?
- **TypeScript** → Kontrol başarılı olduktan sonra bu değerin tipi nedir?

Ayrı bir şema tanımına veya `as` ile tip zorlamasına gerek kalmadan, küçük doğrulama fonksiyonlarını birleştirerek hem çalışma zamanı güvenliğini hem de tip çıkarımını sağlamış oluruz.

## 🧩 Veri Yapısı Doğal Olarak Büyüyebilir

Gerçek dünyadaki veri yükleri genellikle daha karmaşıktır. Bir kullanıcının şu alanları olabilir:

- İsteğe bağlı (optional) bir profili
- Boş olabilir (nullable) bir biyografisi
- Bir etiket (tags) listesi

Küçük tip muhafızlarını birleştirmeye devam ederek (composable yapı sayesinde), şema öncelikli ağır iş akışlarına girmeden karmaşık veri yapılarını da kolayca ve güvenle doğrulayabiliriz. 

**Pratik Çıkarım:** Uygulamanızın dış sınırlarında (`API`, `localStorage`) `as` anahtar kelimesini kullanmaktan kaçının. Büyük bir doğrulama kütüphanesine ihtiyaç duymadığınız durumlarda bile basit tip muhafızları (type guards) yazarak çalışma zamanı hatalarını henüz sınırdayken yakalayın.

---

**Kaynak:** dev.to (https://dev.to/nyaomaru/how-do-you-validate-unknown-in-typescript-without-a-schema-library-1a11)
**Yayıncı:** [Edumints Blog](https://blog.edumints.com) · Alıntılarken bu URL'ye bağlantı verin: https://blog.edumints.com/typescript-te-sema-kutuphanesi-kullanmadan-unknown-degerleri-nasil
