Tek uygulama içerisinde aynı isimde birden fazla fonksiyon tanımlanabilir. Sadece aynı sayıda ve farklı tip parametre içermelidir.
Örnek kullanım;
function add(a:string, b:string):string;
function add(a:number, b:number): number;
function add(a: any, b:any): any {
return a + b;
}
add("Hello ", "Steve"); // geri dönen değer: "Hello Steve"
add(10, 20); // geri dönen değer: 30
Özelleştirilmiş Aşırı Yüklenen İmzalar (Specialized Overload Signatures)
Farklı tipte parametre vermek yerine string sabitleri ile overload oluşturmak için kullanılır.
Bu yöntem için kurallar;
- En az bir tane nonspecialized signature olmalıdır.
- Özel imza nonspecializd imzanın subtype’ını döndürmelidir.
- Implementation imza tm imzalar ile uyumlu olmalıdır.
class RandomHandler { };
class ReversedHandler { };
class Handler { };
class HandlerFactory {
getHandler(type: 'Random'): RandomHandler;
getHandler(type: 'Reversed'): ReversedHandler;
getHandler(type: string): Handler; // non-specialized signature-bu satır olmadan
kod çalışmaz
getHandler(type: string): Handler { // implementation signature
switch (type) {
case 'Random':
return new RandomHandler();
case 'Reversed':
return new ReversedHandler();
default:
return new Handler();
}
}
}
Özelleştirilmiş imzaların en çok kullanıldığı alan özelleştirilmemiş imzanın superclass’ları döndürdüğü durumlarda kullanılmaktadır. Temel bir bileşen olan DOM’daki (Document Object Model) getElementsByTagName’in nasıl tanımlandığı aşağıda gösterilmiştir.
// This example does not list all variations...
getElementsByTagName(name: "a"): NodeListOf<HTMLAnchorElement>;
getElementsByTagName(name: "blockquote"): NodeListOf<HTMLQuoteElement>;
getElementsByTagName(name: "body"): NodeListOf<HTMLBodyElement>;
getElementsByTagName(name: "button"): NodeListOf<HTMLButtonElement>;
getElementsByTagName(name: "form"): NodeListOf<HTMLFormElement>;
getElementsByTagName(name: "h1"): NodeListOf<HTMLHeadingElement>;
getElementsByTagName(name: string): NodeList; // Non-specialized signature
getElementsByTagName(name: string): NodeList { // implementation signature
return document.getElementsByTagName(name);
}