ProgramlamaFrontend Geliştirici / Fullstack Geliştirici

TypeScript'te otomatik tür çıkarım sistemi (type inference) nasıl çalışır? Tür çıkarmanın seviyeleri nelerdir ve derleyicinin 'zekasına' dayanarak hangi hataları yapabilirsiniz?

Hintsage yapay zeka asistanı ile mülakatları geçin

Yanıt

TypeScript güçlü bir tür çıkarım sistemine sahiptir. Çoğu durumda değişkenlerin, parametrelerin ve döndürülen değerlerin türleri bağlama dayanarak otomatik olarak hesaplanır. Birkaç tür çıkarım düzeyi vardır:

  • Basit çıkarım: Değişkenler açık bir tür belirtilmeden tanımlandığında
  • Bağlam çıkarımı: İfade türü bağlamdan belirleniyorsa (örneğin, olay işleyici)
  • En iyi ortak tür: Farklı türlerdeki elemanlara sahip diziler için - en genel tür aranır

Örnekler:

let a = 2; // number let b = [1, "a"]; // (number | string)[] window.addEventListener('click', e => { // e: MouseEvent });

Kısıtlama: Derleyici türü tek anlamlı olarak çıkaramazsa - en geniş olanı seçecektir (genellikle bu any olur), bu da türlemenin avantajlarını kaybettirir.

Aldatıcı Soru

Eğer açıkça belirtilmezse, bir fonksiyonun argümanı türlendirilir mi ama fonksiyon daha sonra türlendirilmiş bir değerle kullanılırsa?

Yanlış Cevap: Evet, TypeScript her zaman otomatik olarak argümanın türünü "tahmin eder".

Doğru Cevap: Hayır. Sadece fonksiyon bağlamı tür hakkında bilgi içeriyorsa, argüman bir tür alır. Aksi takdirde - any veya başka bir temel tür olacaktır, bu da hatalara yol açar. Giriş verilerini her zaman açıkça türlendirmek gerekir.

Örnek:

function f(x) { return x.toFixed(2); // Hata: x — tipo any }

Konunun inceliklerine dair gerçek hata örnekleri


Hikaye

Projede özel bir hook'un döndürdüğü değerin türü açıkça belirtilmedi ve TypeScript, türün undefined olabileceğini göremedi. Sonuç olarak, nesne metodunun kontrol edilmeden çağrılması runtime hatalarına yol açıyordu.


Hikaye

Karışık türlerde değerlerin bir dizisini oluştururken, son tür otomatik olarak any[] dizisi olarak belirlendi, çünkü tür açıkça belirtilmemişti, bu da sonraki kodda türlemenin tüm avantajlarının kaybedilmesine neden oldu.


Hikaye

Servis giriş parametrelerinin doğrulaması türlendirilmemişti ve TypeScript'in "tahminine" dayanıyordu. Codebase'in yeniden yapılandırılmasından sonra otomatik çıkarım çok genel bir tür verdi ve veri türleriyle ilgili hatalar üretime girdi.