出现此错误。我的打字稿版本是 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.
这是因为使用 bson 5.0.0 删除了 ObjectID,这破坏了之前引用它的所有内容。强制你的程序使用 bson 4.7.2.
供其他遇到相同错误的人将来参考。
解决该错误的最佳方法是将
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"
}
}
降级到版本 6.8.3 解决了我的问题。我认为当前版本的 mongoose 可能存在错误。或者当前版本与其某些依赖项存在兼容性问题。
首先,要解决“@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 中,已从
bson
中删除。由于这种情况,像
yarn
和
npm
这样的工具最终可能会安装损坏的依赖项组合。要解决此问题,您可以选择降级
或 升级 mongoose/mongodb/bson 堆栈及其类型,以便它们都同意相同的 bson
API。
npm ls
工具对于查看您安装的每个版本非常有用。又名:
npm ls bson
.您可能会发现将
overrides
功能与
yarn
或
resolutions
的
npm
功能一起使用来强制将依赖项解析为特定版本非常有用。
@types/[email protected]
,投诉就消失了。