Başlık: Başlangıç

    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;

    1. En az bir tane nonspecialized signature olmalıdır.
    2. Özel imza nonspecializd imzanın subtype’ını döndürmelidir.
    3. 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);
    }