我正在使用城市景观及其打字稿定义。类型的定义如下:
export = cytoscape;
export as namespace cytoscape;
declare function cytoscape(options?: cytoscape.CytoscapeOptions): cytoscape.Core;
declare function cytoscape(extensionName: string, foo: string, bar: any): cytoscape.Core;
declare namespace cytoscape { ... }
我正在这样使用它:
import * as cytoscapeTypes from "cytoscape";
let cytoscape: any = require("cytoscape"); // <- What should *any* be changed to?
这很好:
export type CytoscapeProps = { elements: cytoscapeTypes.ElementDefinition[] }
我不知道如何指定cytoscape
方法本身的导入类型。我尝试了各种东西,但似乎无法使其正常工作。我该怎么办?
这可以绘制图形,但是类型不正确,因为我将any
用于导入:
this.cytoscapeInstance = cytoscape(
{
container: this.cyRef,
elements: this.props.elements,
}
)
答案 0 :(得分:1)
分别输入import
和require
的类型和模块是不必要的。在TypeScript中,当您使用import
时,它将导入给定的模块和相关的类型。在这种情况下,满足以下条件即可:
import cytoscape from "cytoscape";
现在,当您执行此操作时:
export type CytoscapeProps = { elements: cytoscape.ElementDefinition[] };
... TypeScript非常聪明,可以知道cytoscape.ElementDefinition
是一种类型,因为您正在将其用作类型。
执行此操作时:
this.cytoscapeInstance = cytoscape({
container: this.cyRef,
elements: this.props.elements,
});
... TypeScript知道cytoscape
是模块的主要输出,它是一个函数。
看看此CodeSandbox可以看到它的实际效果:https://codesandbox.io/s/naughty-bouman-kg9e5