在编写自定义TypeScript定义文件时,出现错误“模块'名称'解析为无类型模块...”

时间:2017-02-22 09:57:16

标签: node.js typescript typescript-typings typescript2.1

我找不到我安装的NodeJS软件包的TypeScript定义var that=this;,因此我尝试为其编写@type/{name}文件,并将该文件放在d.ts文件夹中。这就是我的方式:

{project root}\typings

但是,Visual Studio代码不断产生此错误,并在// My source code: index.ts import Helper from 'node-helper-lib'; // My definition: \typings\node-helper-lib.d.ts declare....(something else) declare module 'node-helper-lib' { class Helper { ... } export = Helper; } 下面添加红线:

  

[ts]扩充中的模块名称无效。模块'node-helper-lib'   解析为'{project>的无类型模块   path} \ node_modules \ node-helper-lib \ index.js',这不可能   增强。

因为库是无类型的,所以不是合法的,所以我应该被允许添加输入吗?

更新

我正在使用:

  • TypeScript:2.1.4
  • Visual Studio代码:1.9.1
  • 节点JS:6.9.4
  • Windows 10 x64

5 个答案:

答案 0 :(得分:63)

实际的解决方案是@Paleo在@hirikarate的回答中给出的评论:

应在 模块声明中声明

示例:

{{1}}

答案 1 :(得分:25)

经过一些尝试和错误后,我发现augmentation表示"在同一文件中声明模块与其他模块声明"。

因此,如果我们要为无类型第三方JavaScript库编写定义文件,我们必须在该文件中只有一个declare module 'lib-name',并且' lib-name&# 39;必须与库名完全匹配(可在其package.json中找到,"名称"属性)。

另一方面,如果第三方库已经包含定义文件 .d.ts,并且我们想扩展其功能,那么我们可以将其他定义放在另一个文件中我们创造的。这称为augmenting

例如:

// These module declarations are in same file, given that each of them already has their own definition file.
declare module 'events' {
   // Extended functionality
}

declare module 'querystring' {
   // Extended functionality        
}

declare module '...' { ... }

我在这里留下我的发现,以防有人有同样的问题。如果我错过了什么,请纠正我。

答案 2 :(得分:0)

我也收到了该错误消息。对我来说,问题是我试图在现有的类型定义文件中声明另一个包含模块声明的模块。将新模块声明移到新文件后,错误消失了。

答案 3 :(得分:0)

在我的情况下,我只是在一个类型文件中使用了以下声明,因此我可以使用所有非类型脚本包:

declare module '*'

答案 4 :(得分:0)

我的问题是我试图在 .ts 文件中声明模块。我将其更改为 .d.ts 并且一切正常。