TypeScript, birçok OOP dilinde olduğu gibi bir sınıfta birden fazla yapıcı gövde bildirimini desteklemez. Bunun yerine, birden fazla yapıcı imzası (overload) bildirebilir ve ardından argümanları manuel olarak ayrıştırdığı tek bir yapıcı gövdesi uygulayabilirsiniz:
class User { name: string; age: number; constructor(name: string); constructor(name: string, age: number); constructor(name: string, age?: number) { this.name = name; this.age = age ?? 18; } } const u1 = new User('Alice'); // age = 18 const u2 = new User('Bob', 32); // age = 32
Önemli detaylar:
"Yapıcıyı böyle gerçekleştirmek mümkün mü?"
undefined
class Test { constructor(x: number) {} constructor(x: string) {} }
**Doğru cevap:** Hayır, bu kod "Duplicate constructor implementation" hatasını verecektir. TypeScript'te sadece bir yapıcı gövdesinin uygulanmasına izin verilir, aşırı yüklenmeler imzalar (gövde olmadan) şeklinde yapılır.
### Konuyla ilgili bilinçsizlikten kaynaklanan gerçek hata örnekleri.
---
> Hikaye
Proje, Java'dan kopyalanan deneyimle farklı parametrelerle iki yapıcıya sahip bir sınıf gerçekleştirmeye çalıştı. Sonuç olarak TypeScript derleme hatası veriyor, proje derlenmiyor ve acilen imzalarla aşırı yüklenmelere dönüştürmek zorunda kaldı.
---
> Hikaye
Takım üyelerinden biri, aşırı yüklenmesi olan bir yapıcı yazdı ama isteğe bağlı parametreleri göz önünde bulundurmayı unuttu (undefined'ı işlemedi). Bu, mevcut olmayan değerlere erişim girişimlerine ve minimum argüman setiyle örnekler oluşturulurken çökmelere yol açıyordu.
---
> Hikaye
Yapıcı aşırı yüklenmeleri tanımlandı, ancak yapıcı gövdesi açıklanan çağrı varyantlarıyla uyuşmuyordu. Bir durumda ikinci argümanın zorunlu olduğu bekleniyordu, ancak imzada isteğe bağlıydı. Bu çelişki hemen tespit edilmedi, ancak unit testleri yazarken ortaya çıktı ve hata ayıklamayı zorlaştırdı.