在编写自定义TypeScript定义文件时出现错误“Module 'name' resolves to an untyped module at...”

ugmeyewa  于 2023-03-31  发布在  TypeScript
关注(0)|答案(5)|浏览(264)

我找不到我安装的NodeJS包的TypeScript定义@type/{name},所以我尝试为它写一个d.ts文件,并将文件放在{project root}\typings文件夹中。我是这样做的:

// 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;
}

但是,Visual Studio Code一直产生此错误,并在declare module 'node-helper-lib'下放置红线:
[ts]扩充中的模块名称无效。模块“node-helper-lib”解析为位于“{项目路径}\node_modules\node-helper-lib\index. js”的非类型化模块,无法对其进行扩充。
因为库是无类型的,所以我应该被允许向它添加类型,这不是合法的吗?

更新日期:

我正在使用:

  • TypeScript:2.1.4
  • Visual Studio代码:1.9.1
  • Node JS:6.9.4
  • windows 10 x64
cczfrluj

cczfrluj1#

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

*导入应该在模块声明中声明

示例:

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

qq24tv8q2#

经过一些尝试和错误,我发现augmentation的意思是“在同一个文件中声明一个模块和其他模块声明”。
因此,如果我们想为一个非类型化第三方JavaScript库编写一个定义文件,我们必须在该文件中只有一个declare module 'lib-name',并且'lib-name'必须与库名称完全匹配(可以在其package.json的“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 '...' { ... }

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

s6fujrry

s6fujrry3#

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

ql3eal8s

ql3eal8s4#

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

xzv2uavs

xzv2uavs5#

对我来说,它发生在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

相关问题