如何为所有节点模块自动安装@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 中的typestypeRoots 用于更改此默认可见性。文档: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的主要内容,如果未能解决你的问题,请参考以下文章

如何为所有节点/快速路由添加前缀

如何为网站安装百度自动推送JS代码?

在 Windows 中自动播放安装 CD 时,如何为 setup.exe 指定发布者

如何为 kops 在 AWS 上安装的 k8s 做集群自动扩缩器?

如何为特定版本的 node.js 安装 d.ts?

如何为 Android 自动化设置 Appium 环境?