【发布时间】:2020-06-19 21:09:27
【问题描述】:
我是 Typescript 和 NodeJs 的新手。每当我在package.json 中提到节点模块并导入节点模块时,我总是会收到以下错误。
Could not find a declaration file for module 'ini'. 'e:/typescript-2020-1/parser1/node_modules/ini/ini.js' implicitly has an 'any' type.
Try `npm install @types/ini` if it exists or add a new declaration (.d.ts) file containing `declare module 'ini';`
Could not find a declaration file for module 'json-query'. 'e:/typescript-2020-1/parser1/node_modules/json-query/index.js' implicitly has an 'any' type.
Try `npm install @types/json-query` if it exists or add a new declaration (.d.ts) file containing `declare module 'json-query';`
为了解决这个问题,我总是在package.json 中搜索并安装以下内容。
"dependencies": {
"ini": "^1.3.5",
"@types/ini": "^1.3.30",
"json-query": "^2.2.2",
"@types/json-query": "^2.2.0"
"@types/node": "^13.9.0"
}
如何避免包含所有类型的节点模块特定类型。
是否可以在不直接添加到package.json 的情况下将@types/<node module> 自动添加到node_modues 中?
我也尝试在tsconfig.json 中添加以下内容,但它不起作用。
"typeRoots": [
"node_modules/@types"
],
我的问题再次是“是否总是需要为每个节点模块添加@types?
请帮我解决。
【问题讨论】:
-
afaik,如果模块没有类型声明(直接包含或作为依赖项包含),则必须像您一样将相应的
@types模块添加为package.json中的依赖项。默认情况下,@types(一旦安装)下的所有模块都是可见的,tsconfig.json中的types和typeRoots用于更改此默认可见性。文档:tsconfig.json - @types, typeRoots and types -
@Tobías,少数模块没有类型,有些模块有。作为开发人员,我了解要安装哪个节点模块,但是如果是打字稿,如何实现这一点,将为该特定节点模块添加类型。
-
如果一个模块在
package.json中声明了一个types元素,则它具有类型声明。如果不是,我尝试从@types repo 安装它们,例如npm install @types/module-name。但是有些模块根本没有类型定义。作者和其他任何人都没有创造它们。在这种情况下,如果我想要或必须使用它,我自己为模块创建一个类型定义(.d.ts文件)。不知道有什么办法可以自动生成类型。
标签: node.js angular typescript npm