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 的兼容性。但这个解决方法目前对我有帮助。