我找不到我安装的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
5条答案
按热度按时间cczfrluj1#
实际的解决方案是在@hirikarate的回答中@Paleo的评论中给出的:
*导入应该在模块声明中声明 。
示例:
qq24tv8q2#
经过一些尝试和错误,我发现
augmentation
的意思是“在同一个文件中声明一个模块和其他模块声明”。因此,如果我们想为一个非类型化第三方JavaScript库编写一个定义文件,我们必须在该文件中只有一个
declare module 'lib-name'
,并且'lib-name'必须与库名称完全匹配(可以在其package.json的“name”属性中找到)。另一方面,如果一个第三方库已经包含了定义文件
.d.ts
,而我们想要扩展它的功能,那么我们可以将额外的定义放在我们创建的另一个文件中。这被称为augmenting
。例如:
我把我的发现留在这里,以防有人有同样的问题。如果我遗漏了什么,请纠正我。
s6fujrry3#
对我来说,问题是我试图在
.ts
文件中声明模块。我将其更改为.d.ts
,一切正常。ql3eal8s4#
我也收到了这个错误消息。对我来说,问题是我试图在一个现有的类型定义文件中声明另一个模块,该文件中有一个模块声明。在我将新的模块声明移动到一个新文件后,错误消失了。
xzv2uavs5#
对我来说,它发生在npm 'node-apple-receipt-verify'包中:
唯一可行的解决方案是像这样安装它: