TypeScript结合Node.js开发时导入http模块报无默认导出错误问题咨询
报错核心原因
Node.js 内置 http 模块采用 CommonJS 规范导出结构,@types/node 提供的类型声明中未给该模块配置默认导出(default export),因此直接使用 import http from 'http' 的 ES 模块默认导入写法,会直接触发类型校验报错,该问题与是否正确安装 @types/node 依赖无关联。
解决方法
- 采用兼容CommonJS结构的命名空间导入(零配置改动,最稳妥)
仅需替换原有导入语句,其余业务代码无需调整:import * as http from 'http'; http.createServer((req, res) => { res.end('Hello World'); }).listen(3000, () => console.log('Port is running on 3000')); - 修改TypeScript全局配置开启模块导入兼容
调整项目根目录的tsconfig.json,在compilerOptions节点添加对应配置,即可保留原有import http from 'http'的写法且正常通过类型检查:{ "compilerOptions": { "esModuleInterop": true, "allowSyntheticDefaultImports": true } } - 切换为Node.js原生ES模块模式开发
先在项目package.json中添加"type": "module"字段,将项目运行环境切换为原生ES模块模式,此时可直接搭配node:路径前缀使用默认导入写法,运行时与类型检查均无报错:// 开启type:module声明后可正常使用的写法 import http from 'node:http'; http.createServer((req, res) => { res.end('Hello World'); }).listen(3000, () => console.log('Port is running on 3000'));
内容的提问来源于stack exchange,提问作者Ashutosh sarangi
相关产品推荐
相关产品推荐

