如何为所有节点模块自动安装@types
Posted
技术标签:
【中文标题】如何为所有节点模块自动安装@types【英文标题】:How to install @types for all node modules automatically 【发布时间】: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
文件)。不知道有什么办法可以自动生成类型。
【参考方案1】:
如果 npm 包包含类型,您将在安装时免费获得。
如果没有,那么您可以在 npm 的 @types 命名空间下找到它们。
有一个名为typac 的有用工具,您可以通过npx
安装或运行它,当您使用它安装任何npm 包时,它将尝试为您的包安装@types。
即
npx typac ini -i
【讨论】:
以上是关于如何为所有节点模块自动安装@types的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows 中自动播放安装 CD 时,如何为 setup.exe 指定发布者