在 Angular nx 项目中导入 JavaScript 模块

Posted

技术标签:

【中文标题】在 Angular nx 项目中导入 JavaScript 模块【英文标题】:import JavaScript module in angular nx project 【发布时间】:2021-12-03 11:10:54 【问题描述】:

我有一个使用 nx 构建的 Angular 项目我想导入没有打字稿类型的标准 javascript 库,例如我想安装和使用 cytoscape 和 cytoscape-context-menus

我得到编译错误,例如

错误 TS7016:找不到模块的声明文件 'cytoscape 上下文菜单'。 'C:/dev/armo/armo-ng-app/node_modules/cytoscape-context-menus/cytoscape-context-menus.js' 隐含地具有“任何”类型。尝试npm i --save-dev @types/cytoscape-context-menus(如果存在)或添加新声明 (.d.ts) 文件包含declare module 'cytoscape-context-menus';

我该如何解决?我试图放置声明文件,但我认为我的设置没有看到它们。

【问题讨论】:

【参考方案1】:

由于没有可用的类型定义 npm 包,您必须自己编写。从你需要的开始,然后根据需要继续在它之上构建。

如果您愿意,也可以将其作为 npm 包共享。

发现这篇文章由@dubtypescript编写TypeScript类型定义文件:http://blog.wolksoftware.com/contributing-to-definitelytyped

还可以从这里看看细胞镜是如何打字的,借用他们的方法:https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/cytoscape/index.d.ts

在结帐时添加了堆栈闪电战:

https://stackblitz.com/edit/cytoscape-6cyuem?file=src%2Fapp%2Fcytoscape-context-menus.d.ts

【讨论】:

谢谢,但没有用。有些人在“DefinitelyTyped”中没有打字。我也尝试添加 .d.ts 文件,但仍然出现编译错误 @canbax 添加了一个 stackblitz 来查看 感谢您的努力,但对我来说最重要的是tsconfig.json 文件。 Stackblitz 没有那个文件。另外,我不能使用@types/cytoscape。它破坏了我的应用程序中的很多事情,因为我没有对很多事情使用类型定义 应该可以下载 stackblitz 项目并检查 tsconfigs。尽管它仍应与标准角度应用程序一起使用。您也可以以类似的方式手动键入 cytoscope。 我仍然收到错误消息。问题在于 nx 项目的架构。我真的不明白如何添加类型。

以上是关于在 Angular nx 项目中导入 JavaScript 模块的主要内容,如果未能解决你的问题,请参考以下文章

如何使用短路径在 Nx Workspace 中导入?

在 Angular 项目中导入 2 个同名的 JavaScript 函数

如何在 Angular 8 项目中导入 Mapbox GL Draw

禁止在 Nrwl Nx 的同一库中导入桶文件

无法在 Angular 项目中导入 socket.io-client

如何在 Angular 6 中导入 sass 文件