编写自定义 TypeScript 定义文件时出错"Module 'name' resolves to an untyped module at..."



我找不到一个安装的nodejs软件包的Typescript定义@type/{name},因此我尝试为其编写d.ts文件,然后将文件放入{project root}typings文件夹中。这就是我的方式:

// My source code: index.ts
import Helper from 'node-helper-lib';

// My definition: typingsnode-helper-lib.d.ts
declare....(something else)
declare module 'node-helper-lib' {
   class Helper { ... }
   export = Helper;
}

但是,Visual Studio代码不断产生此错误,并将红线置于declare module 'node-helper-lib'

[ts]增强中的无效模块名称。模块" node-helper-lib' 在'{project 路径} node_modules node-helper-lib index.js',不能为 增强。

因为图书馆没有类型,所以我应该允许在其中添加键入吗?

更新:

我正在使用:

  • 打字稿:2.1.4
  • Visual Studio代码:1.9.1
  • 节点JS:6.9.4
  • Windows 10 x64

@paleo在 @hirikarate的答案中给出了实际解决方案:

应在内部声明模块声明。

示例:

declare module 'node-helper-lib' {
   import * as SomeThirdParty from 'node-helper-lib';
   interface Helper {
       new(opt: SomeThirdParty.Options): SomeThirdParty.Type
   }
   export = Helper;
}

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

因此,如果我们要为 UNTYPED 3rd party JavaScript库编写一个定义文件,我们必须在该文件中只有一个declare module 'lib-name',而'lib-name'必须与库名称完全匹配(可以在其包装中找到。

另一方面,如果第三方库已经包含定义文件 .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 '...' { ... }

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

对我来说问题是我试图在.ts文件中声明该模块。我将其更改为.d.ts,一切都很好。

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

对我来说,它发生在npm'node-apple-receipt-verify'软件包中:

Invalid module name in augmentation. Module 'node-apple-receipt-verify' resolves to an untyped module at '/node_modules/node-apple-receipt-verify/index.js', which cannot be augmented.ts(2665)

只有工作解决方案是这样安装的:

npm install --save-dev @types/node-apple-receipt-verify

最新更新