在NestJS中如何从URL下载数据写入JSON文件并解决TS2339报错
问题原因
该报错为TypeScript类型校验错误,未给Axios请求返回值指定数据类型时,TypeScript默认将response.data推断为unknown类型,无法识别其为可读流,因此找不到pipe方法。
解决方法
- 首先导入所需的类型依赖
import { Readable } from 'stream'; import type { AxiosResponse } from 'axios'; import * as path from 'path'; // 其余原有导入保持不变
- 给Axios请求加上泛型约束,明确返回的data为可读流类型,修正后的完整控制器代码如下:
export class DataController { constructor(private readonly httpService: HttpService) { } @Get() async download(@Res() res) { // 可通过path.resolve指定写入的绝对路径,避免相对路径不确定性 const writer = createWriteStream(path.resolve(__dirname, './指定存储目录/user.json')); // 给axiosRef添加泛型,指定返回数据为Readable类型 const response: AxiosResponse<Readable> = await this.httpService.axiosRef({ url: 'https://api.github.com/users/prasadg', method: 'GET', responseType: 'stream', headers: { 'Content-Type': 'application/json', } }); // 可选:增加运行时类型校验,逻辑更安全 if (!(response.data instanceof Readable)) { throw new Error('接口返回数据不是可读流类型'); } response.data.pipe(writer); return new Promise((resolve, reject) => { writer.on('finish', resolve); writer.on('error', reject); }); } }
修改完成后类型报错即可消除,接口返回的JSON流会正常写入到你指定目录下的user.json文件中。
内容的提问来源于stack exchange,提问作者Prasad Gavande
相关产品推荐
相关产品推荐

