无法将名称空间“ Boom”用作类型

时间:2019-10-21 14:04:17

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

我将hapi用于我的node + typescript项目之一。由于不推荐使用“裸”包,因此我尝试将@hapi/hapi更新为新的@types/hapi包。我已将@types/hapi__hapi更改为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.

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

{
...
"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"
  },
...
}

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

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文件,因为它来自sourceCompatibility = 1.7 targetCompatibility = 1.7 软件包,但我想解决此问题。我有什么办法可以解决这个错误,例如降级到某些特定版本?

1 个答案:

答案 0 :(得分:6)

我在@hapi/boom处检查了问题,发现它们在7.x版本中包含破坏打字稿构建的类型。它们为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问题,但如果有答案,我仍然愿意寻求更好的答案。