ProgramlamaFrontend geliştirici

this'in TypeScript' te sıra yöntem çağrısı (method chaining) ile tiplenme çalışma prensibini açıklayınız. Kalıtım ve yöntemleri geçersiz kılarken doğru tiplenmeyi nasıl koruyabilirsiniz?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

TypeScript'te this'in doğru tiplenmesi, yöntemlerin ardışık çağrılar için this'i döndürmesiyle method chaining desenini desteklemek açısından kritik öneme sahiptir. Eğer dönen değerin tipini açıkça belirtmezseniz, TypeScript varsayılan olarak dönen nesneyi mevcut sınıfın bir örneği olarak kabul eder ki bu kalıtım durumunda yanlış olur.

Bu sorunun üstesinden gelmek için polimorfik this (polymorphic this types) kullanarak dönen this'i kullanabilirsiniz:

class Builder { value: number = 0; setValue(v: number): this { this.value = v; return this; } } class AdvancedBuilder extends Builder { multiply(factor: number): this { this.value *= factor; return this; } } const b = new AdvancedBuilder().setValue(5).multiply(2); // multiply doğru bir şekilde görünür

dönen type this, yöntem zincirinin yalnızca temel sınıf için değil, aynı zamanda miras alanlar için de doğru bir şekilde tiplenmesini garanti eder.

Sorunun Zorluğu.

Döner değer tipinde this yerine yalnızca sınıf adını (örneğin, Builder'ı döndürmek) kullanmak mümkün müdür? Bu, miras alanların yöntem zincirlerini nasıl etkiler?

Cevap:

Eğer this yerine Builder döndürürseniz:

class Builder { setValue(v: number): Builder { //... return this; } } class AdvancedBuilder extends Builder { multiply(factor: number): this { // ... return this; } } const a = new AdvancedBuilder().setValue(2).multiply(2); // multiply görünmüyor!

setValue'den sonra multiply erişilemez hale gelecektir, çünkü setValue Builder'ı döndürdü, AdvancedBuilder'ı değil. Yalnızca methodun imzasında this kullanılması, yöntem zincirinde doğru tiplenmenin korunmasını sağlar.

Konuyla ilgili gerçek hata örnekleri


Hikaye

Bir geliştirici ekibi, bir konfigürasyon oluşturma için akıcı bir API oluşturdu. Yöntemlerde temel sınıf tipini döndürerek bunu iyi bir uygulama olarak düşündüler. Sonrasında bir miras alınca, akıcı API'de tüm ek yöntemler standart çağrı zincirinin sonrasında görünmez hale geldi. Sonuç: API'yi this ile yeniden yapılandırmak zorunda kaldılar, böylece kullanıcılar genişletmelerden yararlanabildi.


Hikaye

Dahili bir dekoratör kütüphanesinde, belirli bir sınıf tipini açıkça döndürdü. Kullanıcılar miras alanları kullanırken yeni yöntemlere erişimlerini kaybettiler ve "object has no method ..." hatasıyla karşılaştılar. Hata, yalnızca yeni hizmetlerle entegrasyonda ortaya çıktı.


Hikaye

Bir geliştirici, eski C# API'sinden yöntemleri kopyalarken, TypeScript'te yöntem zincirini sınıf adını döndürerek yeniden yazdı. Derleme aşamasında her şey normal görünüyordu, ancak kullanıcı miraslarında yeni yöntemler kayboluyordu. Sadece tsconfig'de sıkı bir kontrol, bu sorunu hızlı bir şekilde ortaya çıkardı ve dönen this'in kullanılmasını sağladı.