我已经安装了md5
(也尝试过blueimp-md5
)包,其中包含相应的类型:
nmp install --save md5 @types/md5
nmp install --save blueimp-md5 @types/blueimp-md5
当我尝试像这样导入它时:
import { md5 } from '../../../node_modules/md5'
我收到错误:Module <path> was resolved to <path>/md5.js, but '--allowJs' is not set.
这让我觉得根本没有发现安装的@types/md5
类型。
在tsconfig.json中我有:
"typeRoots": [
"../node_modules/@types"
]
所以我认为应该自动检测来自node_modules/@types
文件夹的输入,但显然不是。与blueimp-md5
包完全相同。 md5
文件夹中存在node_modules/@types
文件夹,因此它包含所有内容但仍然无效。
Visual Studio Code,TypeScript 2,Angular 2项目。
我做错了什么?
编辑:这是@ types / md5 / index.d.ts文件的内容:
/// <reference types="node" />
declare function main(message: string | Buffer): string;
export = main;
答案 0 :(得分:2)
您不需要在node_modules
内指定路径,它应该是:
import * as md5 from "md5";
编译器将在node_modules
中查找实际模块,并在node_modules/@types
中查找定义文件。
有一个很长的文档页面:Module Resolution
这是因为md5
模块正在导出的方式,因为它是这样做的:
declare function main(message: string | Buffer): string;
export = main;
此案例为covered in the docs:
export =语法指定从中导出的单个对象 模块。这可以是类,接口,命名空间,函数或 枚举。
使用export =导入模块时,特定于TypeScript的导入 = require(&#34; module&#34;)必须用于导入模块。
在你的情况下应该是:
import md5 = require("md5");
如果您要定位es6
,则需要执行以下操作:
const md5 = require("md5");
(当然还是let
或var
)。