Node.js Express+TypeScript中Blob/File的text()方法报错:text is not a function
问题描述
使用TypeScript开发Node.js Express后端时,遇到Blob/File接口的text()方法无法识别的问题:
- 前端以File类型发送生成的PDF到后端
- VSCode智能提示能识别Blob接口的
text()方法,但调用时报错:${variableName}.text is not a function - 已尝试操作:
- 升级TypeScript到v3.9.5
- 设置工作区TypeScript版本
- 确认传入数据类型
- 重启Docker容器
- 附TypeScript v3.9.5的
lib.dom.d.ts中Blob接口定义:
interface Blob { readonly size: number; readonly type: string; arrayBuffer(): Promise<ArrayBuffer>; slice(start?: number, end?: number, contentType?: string): Blob; stream(): ReadableStream; text(): Promise<string>; }
解决方案
1. 检查Node.js版本兼容性
Node.js从v15.7.0开始实验性支持Blob的text()方法,v16.0.0才稳定支持。如果你的Node.js版本低于这个范围,即使TypeScript类型定义存在,运行时也会找不到该方法。
- 执行
node -v查看当前版本,若版本过低,升级到v16+ LTS版本。
2. 确认后端接收的实际数据类型
Express后端接收前端上传的File时,不会直接得到浏览器环境的Blob/File对象,通常是通过multer等中间件处理后的Buffer或流对象,或是req.body中的二进制数据。TypeScript的类型提示可能因你给变量标注了Blob类型,但实际运行时是Node.js的Buffer或其他类型,导致无text()方法。
- 若用
multer接收文件,上传内容存在req.file.buffer(Buffer类型),可直接用buffer.toString('utf8')替代text()方法;若为原始二进制流,先转换为Buffer再处理。
3. 补充Blob polyfill(针对低版本Node.js)
如果无法升级Node.js,可引入blob-polyfill补充支持:
- 安装依赖:
npm install blob-polyfill - 在项目入口文件添加:
import 'blob-polyfill'; - 确保
tsconfig.json的compilerOptions.lib中包含"dom"库,保证类型定义生效。
4. 修正TypeScript类型标注
确保变量类型与运行时实际值一致:
- 若实际接收的是Buffer,不要标注为
Blob,直接用Buffer类型,通过buffer.toString()处理内容; - 若需要转为Blob(高版本Node.js支持),可手动转换:
const blob = new Blob([req.file.buffer], { type: req.file.mimetype }); const textContent = await blob.text();
内容的提问来源于stack exchange,提问作者eniux
相关产品推荐
相关产品推荐

