转换为类型'GridFSBucketWriteStream' 'WritableStream'不可能吗?



最近无法将GridFSBucketWriteStream转换为类型WritableStream,并导致类型错误。

const wst = svcMng.DBService.projectImageGrid.openUploadStream(image.name);
const uploadPromise = new Promise((resolve, reject) => {
const read = new Readable({
read() {
this.push(image.data);
this.push(null);
}
});
read.on('error', (err) => {
reject(err);
});
read.on('end', () => {
resolve(null);
});
read.pipe(wst);
});
await uploadPromise;

read.pipe(wst)导致:"GridFSBucketWriteStream"类型的参数不可分配给"WritableStream"类型参数。

wstGridFSBucketWriteStream类型,应该可以转换为WritableStream,因为GridFSBucketWriteStream类实现了NodeJS.WritableStream

当然read.pipe(wst as any)解决了这个问题,但我想避免它

read.pipe(wst as NodeJS.WritableStream)也不工作。

版本:

  • 猫鼬:6.1.4
  • 打字稿:4.1.2
  • 节点v12.16.3

提前感谢您的帮助!

更新:这个问题已经用mongodb 4.3.0版本解决了(在我下面的回答之后大约6个小时(。(这是错误报告:jira.mongodb.org/browse/NODE-3843(

我遇到了同样的问题,找到了解决办法。它隐式安装了@types/node 17.0.8版本(请参阅node_modules中的@types/node/package.json(。断开变化发生在WritableStream接口中的节点16和节点17之间。end方法用于返回void,现在返回this

您可以通过运行指定所需节点类型的版本

npm install --save-dev @types/node@16

从长远来看,mongodb Node驱动程序项目需要修复其与Node 17的兼容性。但这个变通办法暂时帮了我一把。

最新更新