2017-02-15 105 views
0

在图形可视化任务工作时,我发现在d3.js分型如下界面(上行链路here):如何在typescript接口中实现无名称方法?

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

Typescript docs

功能类型 接口能够描述所述宽范围的 JavaScript对象可以采取的形状的。除了描述具有 属性的对象之外,接口还能够描述函数类型。

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

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 
}