将响应正文流式传输到打字稿中的文件:“ReadableStream<Uint8Array>”类型上不存在属性“管道”
Posted
技术标签:
【中文标题】将响应正文流式传输到打字稿中的文件:“ReadableStream<Uint8Array>”类型上不存在属性“管道”【英文标题】:Streaming response body to file in typescript: Property 'pipe' does not exist on type 'ReadableStream<Uint8Array>' 【发布时间】:2021-10-05 22:51:20 【问题描述】:我能够从 API 中获取二进制主体以将其写入节点中的文件。
const fileStream = fs.createWriteStream(filePath);
fetch(apiURL).then((downloadResponse) =>
downloadResponse.body.pipe(fileStream);
);
但是,这样做时会出现以下 linting 错误:
类型上不存在属性“管道” '可读流'
当 linter 出错时调用会起作用,这对我来说似乎很奇怪。 我什至最初认为我的逻辑是错误的,并且浪费时间调试这个工作调用......
我的打字稿版本是否出于某种原因错误识别了类型,还是我应该无法执行此调用?
我刚开始使用打字稿,但有时我会遇到这样的特质,当我在做一些看起来完全有效的事情时会减慢我的速度。
【问题讨论】:
这里 tsc 可能不知道 node-fetch 响应对象的属性。尝试为 node-fetch 安装类型:“npm i -D @types/node-fetch”。 啊确实是这样,它还需要导入,而使用 fetch 通常不需要。 【参考方案1】:在 cmets 中提供的答案确实是正确的,但是这不是直截了当的上下文是在 nextjs 应用程序中使用从服务器端渲染函数(如 getServerSideProps)获取。
在客户端,使用标准 fetch api 非常简单,但在 s-s-r 上,并不明显必须使用 npm i @types/node-fetch
额外安装节点获取类型。
【讨论】:
以上是关于将响应正文流式传输到打字稿中的文件:“ReadableStream<Uint8Array>”类型上不存在属性“管道”的主要内容,如果未能解决你的问题,请参考以下文章