TypeScript'te Fonksiyon Aşırı Yükleme
Bazen, döndürdüğü değerin türünün iletilen parametrelere bağlı olduğu fonksiyonlarla karşılaşılır. Bunun için TypeScript'te fonksiyon aşırı yüklemesi kullanılır. Bu, fonksiyonun farklı imza varyantlarını belirtmeye olanak tanır.
Bir örnek üzerinden inceleyelim. Bir dizenin karakterlerini harf dizisine bölen bir fonksiyonumuz olduğunu varsayalım:
function splitStr(str: string): string[] {
return str.split('');
}
Ayrıca, bir sayının karakterlerini rakam dizisine bölen bir fonksiyonumuz olduğunu da varsayalım:
function splitNum(num: number): number[] {
let str: string = String(num);
let arr: string[] = str.split('');
return arr.map(elem => +elem);
}
Şimdi her iki fonksiyonu tek bir fonksiyonda birleştirelim. Yeni fonksiyon, parametrenin türüne bağlı olarak ya bir sayı dizisi ya da bir string dizisi döndürmelidir.
Fonksiyonumuzun çeşitli imzalarını bildirmek için aşırı yüklemeyi kullanalım:
function splitVal(val: number): number[];
function splitVal(val: string): string[] {
// her iki imzanın uygulanması
}
Şimdi fonksiyonun uygulamasını yazalım. Kodunda, fonksiyon imzalarından hangisinin tetiklendiğini bir koşulla belirlemeli ve buna bağlı olarak doğru kodu, doğru türde bir sonuçla çalıştırmalıyız:
function splitVal(val: number): number[];
function splitVal(val: string): string[] {
if (typeof val === 'string') {
return val.split('');
} else {
let str: string = String(val);
let arr: string[] = str.split('');
return arr.map((elem: string): number => +elem);
}
}
Diğer dillerin aksine, TypeScript'te aşırı yükleme ile tek bir fonksiyon oluşturulur. Aynı ada sahip ancak farklı imzalara sahip birden fazla fonksiyon oluşturulamaz.
Bir DOM elemanının metnini döndüren veya değiştiren bir fonksiyon yazın. Şu şekilde çalışmalıdır:
text('#elem', 'text'); // metni ayarlar
text('#elem'); // mevcut metni döndürür