将响应正文流式传输到打字稿中的文件:“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>”类型上不存在属性“管道”的主要内容,如果未能解决你的问题,请参考以下文章

如何从打字稿中的json响应中获取日期对象

无法从打字稿中的 json 对象获取数组响应

循环将新记录添加到打字稿中的数组[关闭]

从打字稿中的 Set-Cookie 标头中获取 jwt 值

将首先转换为 Observable 的 json 文件转换为打字稿中的地图,角度

什么是打字稿中的打字