TypeScript
11 - Interfaces hybrides

Types hybrides et interface

Un type hybride combine généralement les caractéristiques d'une fonction et d'un objet. Il est défini à l'aide d'une interface qui spécifie à la fois une signature de fonction et des champs d'objet. Il est donc possible d'appeler des sous méthodes

interface Counter {
    (start: number): string;  // Signature de fonction
    interval: number;         // Propriété d'objet
    reset(): void;            // Méthode d'objet
}
 
function getCounter(): Counter {
    let counter = <Counter>function (start: number) {
        return `Counting from ${start}`;
    };
    counter.interval = 1000;
    counter.reset = function () {
        console.log("Counter reset.");
    };
    return counter;
}
 
let c = getCounter();
console.log(c(10));          // Utilise comme fonction
c.reset();                   // Utilise comme objet
console.log(c.interval);     // Accès à la propriété