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:
Ö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.
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 }
Hikaye
Projede özel bir hook'un döndürdüğü değerin türü açıkça belirtilmedi ve TypeScript, türün
undefinedolabileceğ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.