Teknoloji ipuçlarını kendin uygula
İçerik
Son yazılar
Biz kimiz
Yazılım Atölyesi, adım adım teknoloji rehberleriyle kendi başına öğrenip uygulama yapmak isteyenlere yardımcı olur. Pratik ipuçları, araç önerileri ve çözümler bulacaksınız.

TypeScript Type Inference Otomatik Tipler

TypeScript'te her değişkenin başına tip yazmak zorunda değilsin. Derleyici çoğu tipi kendi bulur. Buna type inference yani tür çıkarımı denir. Doğru kullanıldığında kod hem kısalır hem de daha güvenli olur. Çünkü elle yazdığın tip yanlış olabilir; çıkarılan tip ise koddaki gerçeği yansıtır.

Aşağıdaki adımları kendi projende deneyerek ilerle. Boş bir klasör aç, npm init -y ve npm i -D typescript ile başla. npx tsc --init çalıştır, strict: true açık kalsın. Editörde tipi görmek için değişkenin üzerine gel; ipucu balonunda çıkarılan tip yazar.

Type Inference Nasıl Çalışır?

TypeScript, atadığın değere bakar ve en uygun tipi seçer. Bu seçim bazen geniş, bazen dar olur. Farkı bilmek işin yarısı.

let, const ve tip genişlemesi

const ile tanımlarsan literal tip çıkar. let ile tanımlarsan tip genişler.

Bu davranışa "widening" denir. Neden önemli? Bir fonksiyon sadece "aktif" | "pasif" kabul ediyorsa, let ile tanımlanmış bir string'i vermeye çalıştığında hata alırsın. Çözüm: değişmeyecek değerleri const ile yaz.

Fonksiyon dönüş tipi ve bağlamsal tipleme

Dönüş tipini yazmayı çoğu zaman atlayabilirsin.

Buna bağlamsal tipleme (contextual typing) denir. Bir fonksiyonu, tipi bilinen bir yere verirsen parametreleri kendiliğinden tiplenir. addEventListener("click", e => ...) içinde e'yi MouseEvent diye yazmak gereksizdir.

Nesne ve dizilerde çıkarım

Nesne literal'inde her alan ayrı ayrı çıkarılır.

Kural olarak: değişkene tip yazmak yerine, değeri düzgün yaz. Çıkarılan tip zaten doğru olacak.

Az Tip Yazarak Daha Sağlam Kod

Şimdi çıkarımı kontrol altına alma teknikleri. Bunlar tekrar eden tip tanımlarını ortadan kaldırır.

as const ve satisfies

as const tüm nesneyi salt okunur ve literal yapar.

satisfies ise şekli doğrular ama çıkarımı bozmaz. const renkler = { ana: "#111", ikincil: "#eee" } satisfies Record<string, string> yazdığında hem yazım hatası yakalanır hem de anahtarlar literal kalır. Klasik : Record<string, string> yazımı bu detayı kaybettirir.

typeof, ReturnType ve türetilmiş tipler

Var olan bir değerden tip türetmek, ikinci kez tip yazmaktan iyidir.

AmaçYazım
Değerden tip almaktypeof config
Fonksiyon dönüşüReturnType<typeof createUser>
Dizi eleman tipitypeof liste[number]
Promise içiAwaited<ReturnType<typeof fetchUser>>

Böylece kod değiştiğinde tipler peşinden gelir. Elle senkron tutmaya çalışmazsın.

Generic'lerde çıkarım

Generic fonksiyon yazarken tip argümanını çağrı sırasında vermek genelde gereksizdir.