Node.js环境下TypeScript创建File对象提示File is not defined如何解决?
问题根源
File 是浏览器端的Web API,不属于ECMAScript标准内置对象,你遇到的报错本质是运行环境缺失实现,而非TypeScript配置遗漏:
- 你的
tsconfig.json中lib字段引入了DOM类型库,因此TypeScript编译阶段可以正常识别File类型,不会抛出类型错误 - 18.x以下版本的Node.js原生环境没有内置
File的实现,因此代码运行时会抛出ReferenceError: File is not defined
解决方案
根据你的实际需求可以选择以下任意一种方案:
方案1:升级Node.js到18.x及以上版本
Node.js 18.x版本开始已经内置了Web标准的File、Blob等API,直接运行代码即可,无需额外修改配置。如果TypeScript类型检查仍报错,可以在tsconfig.json的compilerOptions.lib字段中添加ES2022,同时将target调整为ES2022,并升级@types/node依赖到最新版本即可。
方案2:使用第三方polyfill兼容低版本Node.js
如果需要兼容18以下的Node.js版本,可以安装Web API的polyfill包:
- 安装依赖:
npm install @web-std/file - 在业务代码顶部引入File实现即可正常使用:
import { File } from '@web-std/file' // 后续代码无需修改 const file = new File(["asdasdsa"], 'metadata.json'); console.log(file.name);
方案3:使用Node.js原生能力替代(推荐纯控制台场景使用)
如果你的业务只是需要操作本地文件,不需要完全兼容WebFile接口,完全可以直接使用Node.js内置的fs模块完成文件读写、元信息获取等操作,不需要引入额外依赖:
import * as fs from 'fs/promises' // 示例:写入本地文件 await fs.writeFile('metadata.json', 'asdasdsa') // 示例:读取文件元信息 const stat = await fs.stat('metadata.json') console.log(stat.size, 'metadata.json')
内容的提问来源于stack exchange,提问作者dush88c
相关产品推荐
相关产品推荐

