将“GridFSBucketWriteStream”转换为“WritableStream”类型不可能吗?

Luc*_*aud 2 mongoose mongodb node.js typescript

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;
Run Code Online (Sandbox Code Playgroud)

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

wst是一种GridFSBucketWriteStream类型,应该可以转换为WritableStreamGridFSBucketWriteStream实现NodeJS.WritableStream

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

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

版本:

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

预先感谢您的帮助!

Dav*_*ton 5

更新:这个问题已经在 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 的兼容性。但这个解决方法目前对我有帮助。