打字稿 - 混合类型

时间:2015-05-15 23:31:28

标签: javascript typescript

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

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

var c: Counter;
c(10);
c.reset();
c.interval = 5.0;

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

我知道我能做到:

var c: Counter;
c = function(s: number){
 return "'" + s + "'";
}

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

更新

There is a similar question - 这回答了这个问题,尽管如此,我仍然觉得这个例子很复杂。

1 个答案:

答案 0 :(得分: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();

var getCounter = createCounter();
getCounter(10);
getCounter.reset();