在Angular 5中,如何导入没有@types的NPM模块

ALa*_*nne 5 node.js npm typescript angular

我正在尝试Angular 5,从angular-cli开始一个项目.在这个项目中,我想使用一个NPM模块:J2M(https://github.com/kylefarris/J2M),所以我在线看了看这两个命令:

npm install j2m --save
npm install @types/j2m --save-dev
Run Code Online (Sandbox Code Playgroud)

不幸的是,@ types/j2m根本不存在.所以我试图找到一种方法来定义我自己的打字但却没有成功......

我正在使用此代码:

import * as J2M from "j2m";
...
console.log(J2M.toM(value));
Run Code Online (Sandbox Code Playgroud)

但根据我在网上找到的样本,"j2m"无法识别,或"toM"不是函数...

那么,导入这个模块的正确方法是什么?

谢谢,

小智 14

您需要将脚本添加到angular-cli.json文件中.

在该scripts属性下,添加

'../node_modules/path/to/minified/js.js'
Run Code Online (Sandbox Code Playgroud)

如果需要样式,则还必须在styles属性下将其添加到同一文件中.

完成后,您的库将被导入.这意味着您不需要使用这样的东西

import * from 'j2m';
Run Code Online (Sandbox Code Playgroud)

但是如果你想在没有IDE抛出错误的情况下使用全局变量,那么你应该添加

declare var J2M: any;
Run Code Online (Sandbox Code Playgroud)

J2M是从资料库中导出,全局函数(例如,用于MomentJS,这个变量叫做moment).

当您使用定义文件时,它只是告诉CLI自动获取JS库,并为您提供IDE自动完成功能.使用此解决方案,您没有自动完成,并且您明确告诉CLI在哪里获取库.