TypeScript, JavaScript’in üzerine geliştirilmiş, tip güvenliği sağlayan bir programlama dilidir. En güçlü özelliklerinden biri, nesnelerin yapısını önceden belirleyebilmemiz ve bu sayede kodumuzu daha sağlam ve anlaşılır hale getirebilmemizdir.
Bu yazıda, TypeScript’te nesne (object) tanımlamanın temellerini, tip anotasyonlarını, sabit (readonly) özellikleri, nesne içinde fonksiyon kullanımını ve özel tip tanımlarını (type alias) öğreneceğiz.
Nesne Tanımlama ve Tip Anotasyonu
JavaScript’te bir nesne, anahtar-değer çiftlerinden oluşan bir yapıdır. TypeScript’te ise bu nesnelerin sahip olması gereken alanları ve bu alanların türlerini tanımlayarak daha kontrollü bir yapı kurabiliriz. Buna tip anotasyonu denir.
Örnek:
let ogrenci: { ad: string; yas: number; aktif: boolean } = {
ad: "Zeynep",
yas: 17,
aktif: true
};
Bu örnekte, ogrenci
adlı nesne üç alan içerir: ad
(metin), yas
(sayı) ve aktif
(doğru/yanlış). TypeScript bu tanıma göre, bu alanlara yanlış türde veri girilmesine izin vermez.
Bu, hem hataları önler hem de kodun ne yaptığı daha kolay anlaşılır hale gelir.
Readonly Özellikler
Bazı nesne özelliklerinin değiştirilememesi istenebilir. Örneğin bir öğrencinin numarası bir kere belirlendikten sonra bir daha değişmemelidir. Bu gibi durumlar için TypeScript, readonly
anahtar kelimesini sunar.
Örnek:
let ogrenci: { readonly numara: number; ad: string } = {
numara: 12345,
ad: "Ali"
};
Bu nesne oluşturulduktan sonra ogrenci.numara
alanı değiştirilemez. Değiştirmeye çalışırsanız TypeScript hata verir. Bu da önemli bilgilerin kazara değiştirilmesini engeller.
Nesne İçinde Fonksiyon (Metot) Tanımlama
TypeScript’te nesneler yalnızca veri değil, o verilerle ilgili işlemleri tanımlayan fonksiyonları da içerebilir. Bu tür fonksiyonlara metot denir.
Örnek:
let urun: {
ad: string;
fiyat: number;
indirimHesapla: (oran: number) => number;
} = {
ad: "Kulaklık",
fiyat: 300,
indirimHesapla: function (oran) {
return this.fiyat - this.fiyat * oran;
}
};
Burada indirimHesapla
, ürün fiyatına göre indirim uygulayan bir fonksiyondur. Bu sayede veriye bağlı işlemler de nesnenin içinde tutulabilir.
Type Alias (Özel Tip Tanımı)
Kod yazarken aynı türde nesne tanımını birden fazla yerde kullanmanız gerekebilir. Her defasında uzun uzun yazmak yerine, bu yapıya bir isim verip her yerde o ismi kullanabilirsiniz. Bu yapıya type alias denir.
Örnek:
type Ogrenci = {
ad: string;
yas: number;
aktif: boolean;
};
let ogr1: Ogrenci = { ad: "Ayşe", yas: 16, aktif: true };
let ogr2: Ogrenci = { ad: "Burak", yas: 17, aktif: false };
Bu sayede kod hem daha kısa hem daha okunabilir hale gelir. Ayrıca ileride bu tipte bir değişiklik yapmanız gerekirse sadece bir yerde değiştirmeniz yeterlidir.
DRY Prensibi ve Tekrarlı Tiplerden Kaçınma
DRY (Don’t Repeat Yourself) prensibi, yazılım geliştirmede tekrar eden kodlardan kaçınmayı öneren temel kurallardan biridir. Özellikle benzer nesne yapıları tekrar tekrar yazıldığında bu kural ihlal edilmiş olur.
Kötü örnek:
let kitap1: { ad: string; sayfaSayisi: number } = { ad: "Roman", sayfaSayisi: 250 };
let kitap2: { ad: string; sayfaSayisi: number } = { ad: "Hikaye", sayfaSayisi: 150 };
İyi örnek (type alias kullanımı ile):
type Kitap = { ad: string; sayfaSayisi: number };
let kitap1: Kitap = { ad: "Roman", sayfaSayisi: 250 };
let kitap2: Kitap = { ad: "Hikaye", sayfaSayisi: 150 };
Bu sayede hem tekrar eden kodlar ortadan kalkar hem de tip yapısını bir yerde düzenleyerek tüm ilgili nesneleri güncellemek kolaylaşır.
Sonuç
TypeScript’te nesneler yalnızca veri depolamak için değil, aynı zamanda bu verileri düzenli, güvenli ve tekrar kullanılabilir hale getirmek için kullanılır. Tip anotasyonları sayesinde hataları erken aşamada fark edebilir, readonly
ile sabit verileri koruyabilir, metotlarla nesneye işlev kazandırabilir ve type
alias’larıyla kodunuzu sadeleştirebilirsiniz.
DRY prensibi sayesinde tekrar eden yapıları önleyerek daha bakımı kolay ve temiz bir kod tabanı oluşturabilirsiniz. Bu beceriler özellikle büyük projelerde hem zaman hem hata maliyetini ciddi şekilde azaltır.