我面临着一种情况,我需要使用第三方接口(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/