如何在typescript接口中实现无名方法?

时间:2017-02-15 14:32:28

标签: typescript

在图形可视化任务上,我在d3.js类型中找到了以下界面(上游链接here):

export interface Force<NodeDatum extends SimulationNodeDatum, LinkDatum extends SimulationLinkDatum<NodeDatum> | undefined> {
    (alpha: number): void; // <- ???
    initialize?(nodes: NodeDatum[]): void;
}

这个(alpha: number): void;在我看来有点不常见。我从不同的OOP语言中得到的直觉就好像它会像C ++ functor一样。但我无法找到正确的语法来实现它。

这是什么?

如何实现此界面?

如何调用此方法?

1 个答案:

答案 0 :(得分:1)

来自Typescript docs

  

功能类型   接口能够描述各种形状   JavaScript对象可以采取。除了描述一个对象   属性,接口也能够描述函数类型。

     

为了描述带有接口的函数类型,我们给出了接口a   呼叫签名。这就像只有一个函数声明   给出的参数列表和返回类型。参数中的每个参数   列表需要名称和类型。

interface SearchFunc {
    (source: string, subString: string): boolean; 
}
     

一旦定义,我们可以像使用其他接口一样使用此函数类型接口。   在这里,我们将展示如何创建函数类型的变量   为它指定一个相同类型的函数值。

let mySearch: SearchFunc;
mySearch = function(source: string, subString: string) {
    let result = source.search(subString);
    return result > -1;
}

所以你可以用

来实现它
let test: Force = function(alpha: number) {
   //do stuff
}
//optional part
test.initialize = function(nodes: NodeDatum[]) {
   //do other stuff
}