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); }