TypeScript başlangıçta JavaScript'ten en pürüzsüz şekilde geçiş sağlamak amacıyla geliştirilmişti, bu nedenle değişkenler veya parametreler açıkça belirtilmiş bir tür olmadan varsayılan olarak any türünü alıyordu. Bu durum geçişi kolaylaştırıyordu, ancak statik tip kontrolünün faydalarını azaltıyordu. Kodun güvenilirliğini ve tahmin edilebilirliğini artırmak amacıyla TypeScript ekibi, türleri açıkça belirtmeyi veya TypeScript'e bunları doğru şekilde çıkarma olanağı vermeyi gerektiren noImplicitAny derleyici bayrağını uyguladı.
noImplicitAny kapalı olduğunda, geliştiriciler değişken, parametre veya fonksiyonun dönüş değerinin türünü açıkça belirtmeyi yanlışlıkla atlayabilirler. Bu durum kodu daha az güvenli hale getirir ve yeniden düzenlemeyi zorlaştırır: türlerle ilgili hatalar derleme aşamasında tespit edilmez, yalnızca çalışma zamanında ortaya çıkar.
tsconfig.json dosyasında noImplicitAny etkinleştirildiğinde, TypeScript derleyicisi her görünebilir any kullanımında hata verecektir. Bu, geliştiricilerin türlere dikkat etmelerini gerektirir, yeniden düzenleme süreçlerini daha az riskli hale getirir ve kodun kendisini daha güvenilir kılar.
Kod örneği:
// tsconfig.json { "compilerOptions": { "noImplicitAny": true } } // Parametre türü belirtilmeden bir fonksiyon örneğiunction printUser(user) { console.log(user.name); // Tür belirtilmediğinde derleme hatası } // Doğru: function printUser(user: { name: string }) { console.log(user.name); }
Önemli Özellikler:
noImplicitAny etkinleştirildiğinde proje içerisindeki tüm potansiyel tür hatalarını sürekli olarak önler mi?
Hayır, bu bayrak yalnızca örtük any hatalarını gidermektedir. any türünün açıkça kullanımına hâlâ izin verilmektedir. Tam koruma için açık any kullanımını linting ve inceleme ile sınırlamak gerekir.
Eğer tür otomatik olarak çıkarılıyorsa, noImplicitAny hâlâ hata verir mi?
Hayır, eğer TypeScript türü doğru bir şekilde çıkarabildiyse (örneğin, başlatma yoluyla), hata oluşmaz. Örneğin:
let n = 123; // Tür number, any değil
Sıkı modun etkinleştirilmesi otomatik olarak noImplicitAny'i etkinleştirir mi?
Evet, strict bayrağı birçok sıkı kontrolü, bununla birlikte noImplicitAny 'yi de etkinleştirir. Ancak, gerekirse manuel olarak devre dışı bırakılabilir.
any bırakmak — sıkı tip denetiminin anlamı kaybolur.noImplicitAny ile projeyi çalıştırmamak, "ne olacak" düşüncesi — birçok gizli hata.Projede noImplicitAny devre dışı bırakılmış, çoğu API işleyici parametreleri açık tür olmadan almaktadır. Yeni iş mantıkları uygulandığında, geliştiriciler özellik adlarında hata yapıyor, ancak hatalar yalnızca üretimde yüzeye çıkıyor.
Artılar:
Eksiler:
noImplicitAny etkinleştirildikten sonra tüm kod aşamalı olarak yeniden düzenlendi, örtük any'ler kaldırıldı. Tür vurgulama ve otomatik tamamlama ile bir düzenleyici kullanılmaya başlandı. Yeniden ortaya çıkan hatalar derleme aşamasında hemen düzeltilmektedir.
Artılar:
Eksiler: