../@types/mongodb/index.d.ts:35:18 - 错误 TS2724:“bson”没有名为“ObjectID”的导出成员。您指的是“ObjectId”吗?

问题描述 投票:0回答:6

出现此错误。我的打字稿版本是 4.5.4 和 "@types/mongodb": "~3.3.1", “@types/mongoose”:“~5.5.17”。知道如何解决吗

../@types/mongodb/index.d.ts:49:74 - error TS2724: '"bson"' has no exported member named 'ObjectID'. Did you mean 'ObjectId'?

49 export { Binary, DBRef, Decimal128, Double, Int32, Long, MaxKey, MinKey, ObjectID, ObjectId, Timestamp } from 'bson';
                                                                            ~~~~~~~~

  ../bson/bson.d.ts:939:22
    939 export declare class ObjectId extends BSONValue {
                             ~~~~~~~~
    'ObjectId' is declared here.
mongodb mongoose types bson
6个回答
4
投票

这是因为使用 bson 5.0.0 删除了 ObjectID,这破坏了之前引用它的所有内容。强制你的程序使用 bson 4.7.2.


3
投票

供其他遇到相同错误的人将来参考。

解决该错误的最佳方法是将

mongodb
软件包升级到版本 4.x.x 或更高版本,并不再需要需要
@types/mongodb
软件包的
@types/bson
软件包。

如果上述方法对您来说不是可行的解决方案,请运行

npm ls bson
命令。您应该看到类似以下内容:

├─┬ @types/[email protected]
│ └─┬ @types/[email protected]
│   └── [email protected]
└─┬ [email protected]
  └── [email protected]

很可能是已弃用的

@types/[email protected]
软件包让您感到困惑。

@types/bson
包创建覆盖并降级到
4.0.5
版本,这是除
4.2.0
之外的最新版本。

在你里面

package.json
:

"overrides": {
        "@types/mongodb": {
            "@types/bson": "4.0.5"
        }
    }

1
投票

降级到版本 6.8.3 解决了我的问题。我认为当前版本的 mongoose 可能存在错误。或者当前版本与其某些依赖项存在兼容性问题。


1
投票

首先,要解决“@types/mongoose”问题:Mongoose 从 5.11.0 开始向其代码库添加了类型。因此,如果您使用的是 5.11.0 或更高版本的 Mongoose,则可以删除该依赖项。

这里的根本原因可以追溯到

@types/mongodb

 包,其中包含依赖项中可被视为错误的内容。也就是说,它允许任何版本的 
@types/bson
 来满足依赖关系:

"dependencies": { "@types/bson": "*", "@types/node": "*" }
但事实上,它只支持特定版本

bson

。对于遇到此错误的用户,
@types/mongodb
 正在尝试从 
ObjectID
 重新导出 
bson
,如下所示:

export { Binary, DBRef, Decimal128, Double, Int32, Long, MaxKey, MinKey, ObjectID, ObjectId, Timestamp } from 'bson';
但是在模块 5.0 中,

ObjectID

 已从 
bson
 中删除。 

由于这种情况,像

yarn

npm
 这样的工具最终可能会安装损坏的依赖项组合。

要解决此问题,您可以选择降级

升级 mongoose/mongodb/bson 堆栈及其类型,以便它们都同意相同的 bson

 API。

npm ls

 工具对于查看您安装的每个版本非常有用。又名:
npm ls bson
.

您可能会发现将

overrides

 功能与 
yarn
resolutions
npm
 功能一起使用来强制将依赖项解析为特定版本非常有用。


0
投票
我的解决方案

npm i -D @types/[email protected] npm i [email protected] --save
    

0
投票
就我而言,我刚刚升级到

@types/[email protected]

,投诉就消失了。

© www.soinside.com 2019 - 2024. All rights reserved.