TypeScript, açık tiplerin aşırı kullanımına karşı güvenli bir geliştirme üzerine kurulmuştur: Çoğu değişken, parametre, döndürülen değerlerin tipi otomatik olarak çıkarılabilir. Tip çıkarım sistemi, kodu neredeyse JavaScript gibi yazmaya izin verir, ancak sıkı tip kontrolü ile, bu da geliştirmeyi önemli ölçüde hızlandırır ve hata sayısını azaltır.
Tip çıkarım, her zaman geliştiricinin beklediği tipi garanti etmez. Bazı durumlarda tip çok geniş (any veya unknown) veya tam tersi olarak aşırı katı olabilir. Bu, ya gereksiz kısıtlamalara ya da tipi kontrol etmenin eksikliğine yol açar; her iki durumda da güvensizdir.
TypeScript, tipin açıkça belirtilmediği durumlarda atama veya fonksiyonun döndürdüğü değere dayanarak otomatik olarak tip çıkarır. Çıkarımı yönetmek için açık tip belirtimi, type assertion, generics ve özel yardımcı fonksiyonlar (ReturnType, Parameters vb.) kullanılabilir. Karmaşık yapılarla çalışmak özel bir kontrol gerektirir: Eğer tip karmaşık veya belirsizse, açıkça belirtilmesi daha iyidir.
Kod örneği:
let a = 5; // number (otomatik olarak çıkarır) function sum(x = 4, y = 3) { // x: number, y: number return x + y; // return: number } // Tip çıkarım hatasıunction getData(flag) { if (flag) return 123; // başka dalda return yok — return tipi: number | undefined } // Daha iyisi açıkça: function getData(flag: boolean): number | undefined { if (flag) return 123; }
Anahtar özellikler:
Doğru/Yanlış: Tip çıkarım her zaman geliştiricinin beklediği tipi verir
Yanlış. Bazen tip daha geniş veya daha dar olabilir, özellikle diziler/objeler/birleşim döndürülen değerler için (number | undefined — sık karşılaşılan bir beklenmediklik).
Objede tip belirtilmezse, TypeScript her zaman kesin yapıyı korur
Hayır, as const kullanılmazsa yapı "genişletilebilir" olur; as const ile readonly olur ve literal tipleri korur.
const obj = { kind: "duck" }; // obj: { kind: string } const obj2 = { kind: "duck" } as const; // obj2: { readonly kind: "duck" }
Dizinin tipi belirtilmezse, TS her zaman içeriğini bilir
Hayır, TypeScript varsayılan olarak diziyi mümkün olduğunca "geniş" yapar — örneğin, let arr = [1, 'a'] (string | number)[] olur, tuple değil.
Backend, türü açıkça belirtilmemiş { data: [] } yanıtını döner, TypeScript data: any[] tipini çıkarır. Bir noktada data bir string dizisi haline gelir — hata yalnızca prod'da ortaya çıkar.
Artıları:
Eksileri:
Projede, her zaman fonksiyonların döndürdüğü değerlerin tipinin açıkça belirtilmesi ve konstanlar için as const kullanılması beklenmektedir. Yapıda herhangi bir değişiklik derleyici tarafından kontrol edilir.
Artıları:
Eksileri: