TypeScript öğrenme yol haritası: tip sisteminden ekip düzenine
TypeScript ile tip güvenli uygulama geliştirmeyi öğrenin: temel tipler, generics, tip daraltma, derleyici ayarları ve başlangıçtan ileriye öğrenme yolu.
TypeScript nedir ve neden kullanılır?
TypeScript, JavaScript'in üzerine statik tip sistemi ekleyen bir programlama dilidir. Yazdığınız kod derlenerek sıradan JavaScript'e dönüşür; tarayıcı ya da Node.js ortamında çalışan şey JavaScript'tir. Tipler yalnızca geliştirme ve derleme aşamasında vardır: hataları kod çalışmadan önce, editörde yakalamanızı sağlar.
JavaScript'te bir fonksiyona yanlış türde değer gönderdiğinizde hata çoğu zaman kod çalıştığında, hatta kullanıcı ekranında ortaya çıkar. TypeScript'te aynı hata, siz yazarken kırmızı çizgiyle işaretlenir. Bu, özellikle birden fazla geliştiricinin çalıştığı ve uzun yıllar yaşayacak kod tabanlarında bakım maliyetini düşürür. Editörün otomatik tamamlama, yeniden adlandırma ve belge gösterme özellikleri de tip bilgisiyle çok daha güçlü çalışır.
Başlangıç: temel tipler ve tip çıkarımı
Öğrenmeye temel tiplerle başlayın: metin (string), sayı (number), mantıksal değer (boolean), diziler, demetler (tuple) ve nesne tipleri. Bir değişkene değer atadığınızda TypeScript tipi çoğu zaman kendisi çıkarır; her yere tip yazmak gerekmez. Fonksiyon parametrelerinde ve dışa açılan arayüzlerde tipi açıkça yazmak ise okunabilirlik açısından iyi bir alışkanlıktır.
Bu aşamada öğrenilecek temel araçlar: • Arayüz (interface) ve tip takma adı (type alias) ile nesne şekli tanımlamak • Birleşim (union) tipleri ile bir değerin birkaç olası türünü ifade etmek • Enum ve sabit değer tipleri ile sınırlı seçenekleri modellemek • İsteğe bağlı (optional) ve salt okunur (readonly) alanlar
Burada önemli bir hata, belirsiz kalan yerde hemen any tipine sığınmaktır. any, tip denetimini kapatır ve TypeScript'in sağladığı güvenceyi ortadan kaldırır.
Fonksiyonlar, sınıflar ve modüller
Gerçek uygulamalar fonksiyonlar, sınıflar ve modüllerden oluşur. TypeScript'te fonksiyonun parametre ve dönüş tipini yazmak, çağıran kişiye bir sözleşme sunar. İsteğe bağlı parametreler, varsayılan değerler ve aşırı yüklemeler (overload) aynı fonksiyonun farklı kullanım biçimlerini tiplendirmek için kullanılır.
Sınıflarda erişim belirleyiciler (public, private, protected), soyut sınıflar ve arayüz uygulama (implements) ile nesne yönelimli tasarım tipli biçimde ifade edilir. Modül sistemi ise kodu dosyalara bölmenizi ve yalnızca gerekenleri dışa açmanızı sağlar. Örneğin bir sipariş modülünde yalnızca sipariş oluşturma fonksiyonu ve sipariş tipi dışa açılır, iç yardımcılar gizli kalır. Bu düzen, bağımlılıkları görünür kılar ve projenin büyümesiyle oluşan karışıklığı azaltır.
Generics ve yeniden kullanılabilir tipler
Generics, tipi parametre haline getirir. Aynı mantığı farklı tiplerle çalıştırmak istediğinizde kodu kopyalamak yerine bir tip parametresi tanımlarsınız. Örneğin bir listeden ilk elemanı döndüren fonksiyon, sayı listesiyle çağrıldığında sayı, metin listesiyle çağrıldığında metin döndürür ve bu bilgi tip denetiminde korunur.
Generics en çok şu yerlerde işe yarar: API yanıtlarını saran ortak sonuç tipleri, veri depolama katmanları, olay yöneticileri ve form bileşenleri. Tip parametresine kısıt (extends) getirerek yalnızca belirli şekle sahip tiplerin kabul edilmesini sağlayabilirsiniz. Başlangıçta okunması zor görünür; kural olarak önce somut tiple yazıp, tekrar eden yapıyı fark ettiğinizde genelleştirmek daha sağlıklıdır.
İleri tip teknikleri ve tip daraltma
Tip sistemi ilerledikçe eşlenmiş tipler (mapped types), koşullu tipler (conditional types), yardımcı tipler (Partial, Pick, Omit, Record gibi) ve şablon sabit tipleri devreye girer. Bunlar mevcut bir tipten yeni tip türetmenizi sağlar; örneğin bir kullanıcı tipinden güncelleme formu için tüm alanları isteğe bağlı bir tip üretmek tek satırdır. Böylece tipleri elle çoğaltmaz, tek kaynaktan türetirsiniz.
Tip daraltma (narrowing), birleşim tipli bir değerin belirli bir kontrolden sonra daha dar bir tipe indirgenmesidir. typeof, instanceof, in operatörü ve ayrıştırılmış birleşimler (discriminated unions) bu işte kullanılır. Örneğin bir ödeme sonucu başarılı ya da başarısız olabilir; durum alanını kontrol ettiğinizde derleyici hangi alanların erişilebilir olduğunu bilir. Ayrıca tipler yalnızca derleme zamanında vardır; dışarıdan gelen veriyi (API yanıtı, form girdisi) çalışma zamanında doğrulamadan güvenmek, TypeScript kullanırken bile sık yapılan bir hatadır.
Derleyici ayarları ve ekip disiplini
tsconfig.json dosyası derleyicinin davranışını belirler. Yeni bir projede strict modunu açmak, TypeScript'in sağladığı güvencenin büyük bölümünü etkinleştirir: örtük any'yi, null ve undefined hatalarını, hatalı fonksiyon eşleştirmelerini yakalar. Mevcut bir JavaScript projesini taşıyorsanız ayarları aşamalı sıkılaştırmak, dosyaları tek tek dönüştürmek daha gerçekçi bir yoldur.
Ekip düzeni için birkaç uygulama yardımcı olur: • Tip denetimini sürekli entegrasyon sürecinde zorunlu bir adım yapmak • Linter kurallarıyla any kullanımını ve gereksiz tip zorlamalarını (as) sınırlamak • Ortak tipleri ayrı bir pakette ya da klasörde tutmak • Kod incelemelerinde tip tasarımını da gözden geçirmek
Bu kurallar bir kez konunca tip güvenliği kişisel çabadan çıkar, takımın ortak standardı haline gelir.
Mevcut bir JavaScript projesini taşırken pratik bir sıra izlenebilir: önce derleyicinin JavaScript dosyalarını da kabul etmesini sağlayın, ardından dosyaları tek tek TypeScript'e çevirin. En çok paylaşılan veri tiplerini, örneğin kullanıcı ve sipariş yapılarını, ilk önce tanımlayın; çünkü birçok dosya bunlara dayanır. Dışarıdan veri alınan noktalarda çalışma zamanı doğrulaması ekleyin, sıkı ayarları ise en sonda tek tek açın.
Mindset programında TypeScript
Mindset'teki TypeScript ile Tip Güvenli Uygulama Geliştirme programı; Tip Sisteminin Temelleri, Fonksiyonlar, Sınıflar ve Modüller, Generics ve Yeniden Kullanılabilir Tipler, İleri Tip Teknikleri, Tip Daraltma ve Çalışma Zamanı Güvenliği ile Derleyici Yapılandırması ve Ekip Disiplini başlıklarıyla bu yolu izler.
Modül sırası temel tiplerden başlayıp derleyici yapılandırmasına ve ekip standardına doğru ilerler; tip sistemini aşamalı öğrenmek isteyen geliştiriciler için sıralı bir çerçeve sunar.
İlgili Mindset programı
TypeScript ile Tip Güvenli Uygulama Geliştirme
Sık sorulan sorular
TypeScript öğrenmek için önce JavaScript bilmek gerekir mi?
Evet, JavaScript bilgisi güçlü bir temel sağlar. TypeScript JavaScript'in üst kümesidir; değişkenler, fonksiyonlar, nesneler, diziler ve asenkron programlama gibi kavramlar aynı çalışır. Önce bu temeli kavrayıp sonra tip sistemini eklemek, tipleri ezberlemek yerine neden gerektiklerini anlamanızı kolaylaştırır.
TypeScript kodu doğrudan tarayıcıda çalışır mı?
Hayır. Tarayıcılar ve Node.js TypeScript'i doğrudan çalıştırmaz; kod önce derleyici veya bir derleme aracı tarafından JavaScript'e dönüştürülür. Tipler bu aşamada silinir. Bu yüzden dışarıdan gelen verinin tipine, çalışma zamanında ayrıca doğrulama yaparak güvenmek gerekir.
any tipi ne zaman kullanılabilir?
any, tip denetimini o değer için kapatır; bu yüzden mümkün olduğunca kaçınılmalıdır. Türü gerçekten bilinmeyen veri için unknown tercih edilir, çünkü kullanmadan önce kontrol etmenizi zorunlu kılar. any, geçiş sürecinde geçici bir çözüm olarak ya da tip tanımı bulunmayan eski bir kütüphane için kısa süreli kullanılabilir.
TypeScript her proje için gerekli mi?
Hayır. Küçük, kısa ömürlü betiklerde ek yük gibi görünebilir. Birden fazla kişinin çalıştığı, uzun süre bakımı yapılacak ve büyüyen projelerde ise hataları erken yakaladığı ve kodu belgelediği için değer üretir. Karar, projenin boyutuna ve ömrüne bağlıdır.
TypeScript'i hangi çatılarla kullanabilirim?
React, Angular, Vue, Next.js ve NestJS gibi çatılar TypeScript'i destekler; Angular ve NestJS ise varsayılan olarak onunla yazılır. Node.js üzerinde çalışan sunucu uygulamalarında da yaygın kullanılır. Hangi çatıyı seçerseniz seçin, tip sisteminin temelleri aynıdır ve öğrendikleriniz taşınır.
İlgili rehberler
Kategori: Yazılım Geliştirme