Interface & Union Tipleri

Interface & Union Tipleri: Union type, bir restoran menüsündeki 'tatlı seçiniz: baklava VEYA sütlaç' satırı gibidir — sadece bu ikisinden biri gelir, üçüncü bir şey (örneğin çorb

Union type, bir restoran menüsündeki 'tatlı seçiniz: baklava VEYA sütlaç' satırı gibidir — sadece bu ikisinden biri gelir, üçüncü bir şey (örneğin çorba) asla masaya konmaz. Peki neden direkt `any` yazıp 'ID her şey olabilir' demiyoruz? Çünkü any garson sınırı tamamen kaldırır ve mutfaktan ne çıkacağı belirsizleşir; union ise 'sadece bu ikisi' diyerek sınırı korur — Java'da bunun birebir karşılığı yoktur, en yakını generic veya method overload ile aynı sonucu daha kalabalık kodla taklit etmektir. QA'da somut faydası: bir API'den dönen `id` alanı bazen number bazen string geliyorsa, `id: number | string` ile tip edilmiş bir fonksiyon her iki durumu da ele almanızı derleme anında zorunlu kılar; tek tip varsayan bir fonksiyon ise diğer formatla karşılaştığında çalışma zamanında sessizce yanlış davranır.

Union type ve discriminated union — pattern

type Status = "PASS" | "FAIL" | "SKIP" — değer yalnızca bu üçünden biri olabilir

status: "success" | "error" — bu "discriminant" alan TypeScript'e hangi tipte olduğunu söyler

if (res.status === 'success') — bundan sonra TypeScript res.data'nın mevcut olduğunu garanti eder

Discriminated union ile API yanıtını işleme adımlarını sırala:

Union tipini "success" | "error" discriminant ile tanımla

if (res.status === "success") ile dal

success dalında res.data'ya güvenle eriş

error dalında res.message'ı göster

type ApiResponse = { status: 'success'; data: unknown } | { status: 'error'; message: string } — if (res.status === 'success') dalında res.message'a erişim ne olur?

Derleme hatası — TypeScript bilir ki success dalında message yok

undefined döner — alan yoksa undefined

Çalışır — TypeScript message'ı opsiyonel yapar