Typescript function overloadings nasıl yapılır ve nasıl çalışır?

533388

Hectopat
Katılım
27 Mart 2022
Mesajlar
4.463
Makaleler
2
Çözümler
54
Merhaba anladığım kadarıyla bizim bir tane fonksiyonumuz var ve biz bu fonksiyona X sayıda parametre ve bu parametrelere y tipini veriyoruz. Ama sonra bu fonksiyonun parametre sayısını X + 1 yapınca ve tipini de Z yapınca overload etmiş oluyoruz doğru mu anlamışım acaba?
Örnek yazdığım kod:

Kod:
function exampleOverloading(a : number , b : number) : number {
 console.log(a + b);
}

function exampleOverloading(a : string , b : string) : string {
 console.log(a + b);
}

exampleOverloading(12,3);
exampleOverloading("Hello","User");

Ama yapmam gereken ilk fonksiyonun işlevini silmem lazımmış, neden acaba? Yni olması gerek böyleymiş:

Kod:
function exampleOverloading(a : number , b : number) : number;
 
Function overload'in yegane amaci, ayni isi yapan iki farkli fonksiyon yazmak yerine ayni fonksiyonun signature'ini degistirerek bu sonucu daha temiz sekilde elde edebilmen.

TS'te function overload etmedim ama ilk fonksiyonu silmen gerekiyorsa overload etmis olmazsin zaten.
Verdigin ornekte return type i da degistirmissin, bu soruna yol aciyor olabilir. Ayni return type ile overload etmene izin veriyordur belki TS.

Ayrica return type i belirlemissin ama sadece console log yazmissin, syntax olarak da yanlis :)
 
Çünkü JavaScript’te fonksiyonlar değişken şeklinde tutuluyor. Parametrelerden bağımsız şekilde.
Dolayısıyla bir fonksiyonun tek gövdesi olabilir. Eğer siz JavaScriptte aynı ada sahip farklı parametre alan metodlar yazarsanız en son yazdığınız fonksiyon aktifleşir sadece. Bu JavaScript’in doğası gereği böyledir.

TypeScript ise yazdığınız bu kodu kendi içinde if’lere çevirerek overload yapmanıza olanak sağlar. Ayrıca overload yaparken tek bir dönüş tipiniz olabilir.
 
Evet. Çünkü yazdığınız kod zaten JavaScript'te tek bir fonksiyona dönüşür.
Farklı tipte veriler dönmeniz zaten overloading doğasına aykırı.

Teşekkür ederim, o zaman overloading bir fonksiyonun parametre sayasını veya işlevini mi değiştirmemize olanak tanıyor, ilk önce string tipi olan bir fonksiyonu da mı any tipine dönüştüremeyiz?
 
Overloading ile method işlevini değitirmek sağlıklı bir şey değil. Ama parametre sayısını artırma, parametre türünü ihtiyaca göre değiştirme işlevi değiştirmediği sürece mantıklıdır. Eğer öbür türlü olsaydı bütün operatörler tek sınıfta yazılır, overload ile ayrıştırılırdı.

Dediğim gibi, return Type’ın değişmesi işlevin değişmesini gerektirir.
 
Tam olarak ne yapılmak isteniyor anlamadım ama TS'de bir metodun parametrelerinin türü biliniyorsa örneğin; a : string | number şeklinde tip tanımlaması yapılabilir. Eğer dönüş tipi tam olarak bilinmiyorsa a : any şeklinde tanımlanabilir. Keza bu metot dönüş tipi için de geçerli.
 

Technopat Haberler

Yeni konular

Geri
Yukarı