从已安装的@types导入?

时间:2016-12-20 20:55:04

标签: angular typescript visual-studio-code

我已经安装了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.

Error in VS Code

这让我觉得根本没有发现安装的@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;

1 个答案:

答案 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");

(当然还是letvar)。