【问题标题】:Cannot use namespace 'Boom' as a type不能使用命名空间“Boom”作为类型
【发布时间】:2019-10-21 22:19:59
【问题描述】:

我将hapi 用于我的一个节点+打字稿项目。由于“裸”包的弃用,我正在尝试将hapi 更新为新的@hapi/hapi 包。我已将@types/hapi 更改为@types/hapi__hapi

一更新,我就开始收到 TypeScript 错误 -

node_modules/@types/hapi__hapi/index.d.ts:514:32 - error TS2709: Cannot use namespace 'Boom' as a type.

514     response: ResponseObject | Boom;
                                   ~~~~

node_modules/@types/hapi__hapi/index.d.ts:4050:18 - error TS2709: Cannot use namespace 'Boom' as a type.

4050         (Error | Boom) |
                      ~~~~


Found 2 errors.

这是我在 package.json 中的依赖项 -

{
...
"devDependencies": {
    ...
    "@types/hapi__boom": "7.4.1",
    "@types/hapi__hapi": "18.2.5",
    "@types/hapi__joi": "16.0.1",
    "@types/nock": "10.0.3",
    "@typescript-eslint/eslint-plugin": "2.4.0",
    "jest": "24.9.0",
    "nock": "11.4.0",
    "nodemon": "1.19.4",
    "prettier": "1.18.2",
    "typescript": "3.6.4"
  },
  "dependencies": {
    ...
    "@hapi/boom": "8.0.1",
    "@hapi/hapi": "18.4.0",
    "@hapi/joi": "16.1.7",
    "axios": "0.19.0",
    "axios-retry": "3.1.2"
  },
...
}

我检查了node_modules/@types/hapi__hapi/index.d.ts 文件,它正在使用以下方式导入Boom -

import * as Boom from '@hapi/boom';

当我把它改成

import { Boom } from '@hapi/boom';

它解决了错误。

我无法更改index.d.ts 文件,因为它来自@types/hapi__hapi 包,但我想解决这个问题。有什么办法可以避免出现此错误,例如降级到某个特定版本?

【问题讨论】:

  • 听起来你需要报告一个错误
  • @Liam 谢谢,我打算发布这个错误,但发现他们已经有一个解决方法是降级 @hapi/boom 包

标签: javascript node.js typescript typescript-typings hapijs


【解决方案1】:

我在@hapi/boom 检查了这些问题,它们包括 7.x 版本中破坏 typescript 构建的类型。他们removed types from 7.x releases,但put them back in 8.x,因为我使用的是@hapi/boom 8.0.1,所以它与现有类型冲突。

所有 hapi 生态系统都将在其中包含类型定义,但其他包并未更新以执行此操作(据我所知),因此在不破坏 TypeScript 构建的情况下解决此问题的唯一方法是降级@hapi/boom7.4.11

PS:我在发布问题几分钟后发现了 github 问题,但我仍然愿意寻求更好的答案,如果有的话。

【讨论】:

  • 您还可以在安装后删除其中一个定义文件。我认为这是一个糟糕的主意,但在某些情况下可能会奏效。
猜你喜欢
  • 2019-07-13
  • 2023-01-09
  • 1970-01-01
  • 2021-02-01
  • 1970-01-01
  • 2019-02-27
  • 2018-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多