Sınıf tipleri ve miras, TypeScript'te, diğer dillerde (Java, C#) alışkın olunan nesne yönelimli şablonları desteklemek için eklenmiştir. TypeScript, özelliklerin ve yöntemlerin türlerini açık bir şekilde belirtmeye ve tür güvenliği ile miras almaya olanak tanır.
JavaScript'te açık bir tür belirtimi olmadan, özelliklerin yanlış kullanımıyla ilgili hatalar derleme aşamasında tespit edilmez. Sorunlar, alt sınıflarda yöntemlerin/özelliklerin yeniden tanımlanması, temel sınıfın sözleşmesine aykırı hareket edilmesi ve protected/private ile yanlış çalışma gibi durumlarda ortaya çıkar.
TypeScript, açıkça özelliklerin ve yöntemlerin türlerini belirtmeyi, public, private, protected anahtar kelimelerini kullanmayı, extends ile sınıfları miras almayı ve arayüzleri gerçekleştirmeyi mümkün kılar.
Kod örneği:
class Animal { public name: string; protected age: number; private secret: string = "hidden"; constructor(name: string, age: number) { this.name = name; this.age = age; } speak(): void { console.log(`${this.name} makes a sound.`); } } class Dog extends Animal { constructor(name: string, age: number) { super(name, age); } speak(): void { console.log(`${this.name} barks.`); } } const dog = new Dog("Rex", 4); dog.speak(); // Rex barks.
Anahtar özellikler:
Eğer sınıf alanının türünü belirtmezsem ne olur?
TypeScript, atanacak değere göre türü çıkarmaya çalışır, eğer atanacak bir değer varsa. Eğer yoksa - tür any olacak, bu da kodun güvenliğini düşürür.
class Test { value; constructor(v: number) { this.value = v; } }
value, varsayılan bir değer belirtilmediyse any türünden olacaktır, bu da tür güvenliğinde potansiyel bir açık oluşturur.
Miras alınan bir yönteminin erişim belirleyicisini değiştirebilir miyim?
Evet, ama yalnızca güçlendirerek (örneğin, public'den protected'a ya da private'a - bu mümkün değil), ancak private'dan public'e geçirilemez, çünkü private üyesi miras alınmaz. Bu bir derleme hatasına yol açar.
TypeScript'te birden fazla sınıftan miras alabilir miyim?
Hayır, sınıflar için çoklu miras yasaktır. Birden fazla arayüzü uygulamak mümkündür, ancak sadece bir sınıfı extends edebilirsiniz.
Projede tüm sınıflar, erişim belirleyicileri ve açık türler olmadan, geliştirmeyi hızlandırmak için tanımlanıyordu.
Artıları:
Eksileri:
Sınıfın tüm üyeleri titizlikle tiplenmiştir, private/protected/public kullanılmakta, özelliklerin ve yöntemlerin katı bir tür kontrolü uygulanmaktadır.
Artıları:
Eksileri: