You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript使用require引入node-fetch报ts2349错误,import正常如何解决?

问题产生原因

node-fetch 3.x及以上版本是纯ESM规范包,仅支持ESM标准的导入语法,其TypeScript类型定义也完全匹配ESM规范:

  • 你用import fetch from 'node-fetch'属于ESM默认导入语法,会自动匹配模块的default导出项,拿到的就是可调用的fetch函数,因此运行正常。
  • 你用CommonJS的const fetch = require('node-fetch')导入时,实际得到的是一个包含default属性的模块对象,而非直接的fetch函数,直接调用整个对象就会触发「没有调用签名」的TS2349报错。

修复方案

你可以根据自己的项目规范选择任意一种方案:

  • 方案1:项目采用ESM规范(package.json中配置"type": "module",tsconfig中module字段配置为ESNext/ES2020及以上),直接保留import fetch from 'node-fetch'的导入写法即可,这也是node-fetch官方推荐的用法。
  • 方案2:项目必须使用CommonJS规范,修改require导入写法,手动取default导出项:
    const fetch = require('node-fetch').default;
    
    同时确认tsconfig.json中已开启esModuleInterop: true,开启ESM和CommonJS模块互导的兼容性支持。
  • 方案3:降级node-fetch到2.x版本,2.x版本同时兼容ESM和CommonJS规范,无需修改原有导入写法:
    npm install node-fetch@2
    # TS项目需要同步安装对应版本的类型定义
    npm install @types/node-fetch@2 -D
    

内容的提问来源于stack exchange,提问作者Oba Api

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 00:24:04