Typescript类用匿名函数实现接口

时间:2017-03-22 13:37:21

标签: javascript typescript d3.js

我遇到需要使用第三方界面(更具体地说是D3)创建课程的情况。

我想创建一个实现D3.Force接口的类,但是我的编译器根本就没有它。

class CustomForce<NodeDatum extends D3.SimulationNodeDatum> implements D3.Force<NodeDatum, any> {
    // Some more code at some point
}

这会引发以下错误:

Class 'CustomForce<NodeDatum>' incorrectly implements interface 'Force<NodeDatum, any>'. 
Type 'CustomForce<NodeDatum>' provides no match for the signature '(alpha: number): void'

通过检查D3.Force的定义,我看到以下内容:

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

如何实现以alpha为参数的匿名函数?!

1 个答案:

答案 0 :(得分:2)

我认为你不能创建一个实现这种界面的类 接口定义了一个函数,该函数还有一个名为initialize的属性,这是一个函数,据我所知,你不能使用类。

但你可以这样做:

function CustomForce<NodeDatum extends D3.SimulationNodeDatum>(): D3.Force<NodeDatum, any> {
    const force = function(alpha: number): void {
        ...
    }

    force.initialize = function(nodes: NodeDatum[]) {
        ...
    }

    return force;
}