网站搜索

node.js - 无法将 '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' 的参数。

wst 是一种 GridFSBucketWriteStream 类型,并且应该可以转换为 WritableStream,因为 GridFSBucketWriteStream 类实现了 NodeJS.WritableStream。

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

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

版本:

  • mongoose: 6.1.4
  • typescript: 4.1.2
  • 节点 v12.16.3

提前感谢您的帮助!

答案#1

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

我遇到了同样的问题,并找到了一种解决方法。它隐式地安装了 @types/node 版本 17.0.8(查看 node_modules 中的 @types/node/package.json)。断裂性更改发生在 Node 16 和 Node 17 之间的 WritableStream 接口中。end 方法以前返回 void,现在返回 this。

您可以通过运行以下命令来指定所需的 Node 类型版本:

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

从长远来看,mongodb Node 驱动项目似乎需要修复与 Node 17 的兼容性。但这个解决方法目前对我有帮助。