打字稿 - 混合类型

For*_*ect 3 javascript typescript

我在Typescript手册中看到了这个例子:

interface Counter {
    (start: number): string;
    interval: number;
    reset(): void;
}

var c: Counter;
c(10);
c.reset();
c.interval = 5.0;
Run Code Online (Sandbox Code Playgroud)

但是当我尝试做c(10);或设置时c.interval = 5.0我得到一个错误 - 无法设置未定义的属性'interval'

我知道我能做到:

var c: Counter;
c = function(s: number){
 return "'" + s + "'";
}
Run Code Online (Sandbox Code Playgroud)

缺少什么 - (或者这是一个不完整的例子)?

更新:

有一个类似的问题 - 它回答了这个问题,尽管如此,我仍然觉得这个例子很复杂.

For*_*ect 5

要完成Typescript手册中的示例:

interface Counter {
    (start: number): string;
    interval: number;
    reset(): void;
}

function createCounter():Counter{
    var counter = <Counter>function(start:number){};
    counter.interval = 123;
    counter.reset = function(){};
    return counter;
}

createCounter()(10);
createCounter().reset();
Run Code Online (Sandbox Code Playgroud)

要么

var getCounter = createCounter();
getCounter(10);
getCounter.reset();
Run Code Online (Sandbox Code Playgroud)