如何在Typescript中使用Cytoscape.js的UI扩展?
是否可以在Typescript中使用Cytoscape UI扩展? 布局扩展可以使用,但当我需要时,例如,我不能调用函数cy.cxtmen(默认值),因为它不在cytoscape界面中。有没有办法使用它 index.ts中的我的代码:如何在Typescript中使用Cytoscape.js的UI扩展?,typescript,cytoscape.js,Typescript,Cytoscape.js,是否可以在Typescript中使用Cytoscape UI扩展? 布局扩展可以使用,但当我需要时,例如,我不能调用函数cy.cxtmen(默认值),因为它不在cytoscape界面中。有没有办法使用它 index.ts中的我的代码: import cytoscape = require('cytoscape'); import contextMenus = require('cytoscape-cxtmenu'); cytoscape.use(contextMenus); const cy
import cytoscape = require('cytoscape');
import contextMenus = require('cytoscape-cxtmenu');
cytoscape.use(contextMenus);
const cy = cytoscape({
container: document.getElementById('cy'),
...
});
let defaults = {
menuRadius: 100,
selector: 'node',
//...
};
let menu = cy.cxtmenu( defaults );
为了索引d.ts,我添加了以下声明:
declare module 'cytoscape-cxtmenu' {
const ext: cytoscape.Ext;
export = ext;
}
在控制台中,在播放过程中,我得到以下信息:
ERROR in [at-loader] ./src/index.ts:152:17
TS2339: Property 'cxtmenu' does not exist on type 'Core'.
Typescript是Javascript的超集,任何可以作为Javascript使用的代码都可以使用Typescript 您遇到的问题是您正在使用的Javascript库缺少正确的Typescript定义 据我所知,DefinitelyTyped()上没有这个包的类型-一个选项是编写一些并提交一个pull请求。然后,在合并和发布请求后,您可以将它们安装为npm包
@types/cytoscape cxtmenu
(并在此之前将它们作为文件包含在项目中)
或者,您可以将库作为any导入,例如:
const cxtmenu = require('cytoscape-cxtmenu');
这意味着typescript不会在您与该库的交互上执行任何类型检查
根据typescript项目的配置方式,您可能需要执行以下操作:
// @ts-ignore
import * as cxtmenu from "cytoscape-cxtmenu";
是的,你可以用。正如Michael所说,typescript是JS的超级集合。你可以做JS能做的任何事情 我用的是angular 8。从“cytoscape上下文菜单”将其作为上下文菜单导入,
import*代码>
如果库依赖于其他一些js或css文件,则必须将它们添加到angular.json
文件中您可以使用as
关键字()将类型any
分配给您的Cytoscape实例,这样可以防止出现错误。以你的问题为例:
(cy as any).cxtmenu( defaults );
请注意,这是一个黑客。分配一种类型的any
否定了Typescript的优点,应该避免,但我还没有找到其他解决方案。请发布您的代码和错误。