javascript - 使用匿名函数实现接口(interface)的 Typescript 类

标签 javascript typescript d3.js

我面临着一种情况,我需要使用第三方接口(interface)(更具体地说是 D3)创建一个类。

我想创建一个实现 D3.Force 接口(interface)的类,但我的编译器不支持它。

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 作为参数的匿名函数?!

最佳答案

我认为您无法创建一个实现此类接口(interface)的类。
该接口(interface)定义了一个函数,它还有一个名为 initialize 的属性,它是一个函数,据我所知,您不能使用类来做到这一点。

但是您可以这样做:

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

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

    return force;
}

关于javascript - 使用匿名函数实现接口(interface)的 Typescript 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42953277/

相关文章:

javascript - 我如何告诉 D3 使树状图垂直(自上而下)而不是从左到右?

javascript - D3.时间刻度不断返回默认值

javascript - 创建具有扩展节点的集群网络力定向图

php - javascript 替代 php 序列化

javascript - 如何使用 JavaScript 将 "href"属性动态添加到链接?

Javascript原生实现div显示/隐藏与animate

javascript - 使用 TypeScript 和 controllerAs 将方法附加到 Controller

javascript - 防止页面在后退按钮上重新加载(使用缓存)。或者向下滚动用户。 (问题,至少,iPhone)

javascript - 将 observable 数组的 observable 转换为 observable 数组

angular - 在 Angular Route 中传递 int 数组