TypeScript'te any, unknown ve object türleri farklı senaryolar için uygulanır ve önemli farklılıklara sahiptir:
any: değişken için tür sistemini devre dışı bırakır. Değişken ile hatasız her şeyi yapmanıza izin verir. Kullanımını, nesnenin türü önceden bilinmediğinde ve güvenliğin kritik olmadığı durumlarda tercih edin.unknown: herhangi bir türü kabul eder, ancak böyle değişkenlerle çalışmak için açık bir tür kontrolü/gerekirse tür dönüştürmesi gereklidir. any'den daha güvenlidir. Bilinmeyen türdeki değerler için kullanın, böylece tür kontrolünü kaybetmezsiniz.object: yalnızca ilkel olmayan nesneler (nesneler, diziler, fonksiyonlar) için bir türdür, ancak ilkel türler (sayılara, stringlere) uygun değildir. Sadece nesnelerle çalışmayı kısıtlar.let a: any = 1; a = 'string'; // TAMAM a(); // TAMAM (ama çalışma zamanında hataya yol açabilir) let b: unknown = 'hello'; b = 5; // TAMAM // b.toUpperCase(); // Hata — tür kontrolü gereklidir if (typeof b === 'string') { console.log(b.toUpperCase()); } let c: object = { key: 'value' }; c = [1, 2, 3]; // TAMAM // c = 1; // Hata, çünkü '1' bir nesne değil
Soru: Eğer any kullanabiliyorsak, unknown türünün bize ne faydası var?
Cevap: unknown, kodun güvenliğini artırır — değişkenle any gibi kontrol edilmeden işlemler yapamazsınız. Türü açıkça kontrol etmeli veya dönüştürmelisiniz; bu da çalışma zamanında birçok sürprizi ortadan kaldırır.
function handle(value: unknown) { // value.trim(); // Hata if (typeof value === 'string') { value.trim(); } }
Hikaye
Projede, üçüncü parti bir kütüphaneyi hızlı bir şekilde entegre etmeye karar verdik ve türlerle uğraşmamak için sonucunu any ile tarif ettik. Sonuç olarak, çalışma zamanında kütüphanenin bir dizi değil, alanları olan bir nesne döndürdüğünü keşfettik; bu da .map() yönteminin hatalarına yol açtı — bu kod derlendi, ama çalışırken hata verdi.
Hikaye
Geliştiricilerden biri, geri plandan gelen veriler için unknown kullandı; ancak alanlarla çalışmadan önce tür kontrolü eklemeyi unuttu. Sonuç olarak, TypeScript kodu derlemedi — hızlı bir şekilde any'ye geçmek zorunda kaldık, bu da potansiyel ayrıştırma hatalarını gizledi ve yanlış veri formatı nedeniyle prod'da hatalara yol açtı.
Hikaye
object türü ile çalışırken karışıklık yaşandı: object türündeki bir değişkene string ve number değerleri atamaya çalıştılar. Geliştirme aşamasında yanıltıcı bir durum fark edilmedi, ancak gözden geçirme sırasında, nesne yöntemlerinin ilkel türlerle çalışmadığına dair hatalar belirlendi. Sorunu çözmek için ek süre harcamak gerekti.