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

TypeScript导入类时出现Cannot find module错误的问题咨询

TypeScript导入无后缀报错的原因与解决方法

问题根因

你遇到的问题是ES模块规则和TypeScript默认配置的冲突:

  • 你的package.json里设置了"type": "module",这意味着项目使用Node.js的ES模块规范,而ES模块要求导入必须指定完整的文件后缀(比如.js)。
  • 你在index.ts里写的import {User} from "./User",TypeScript默认编译时不会自动给导入路径添加.js后缀,导致编译后的dist/index.js里仍然是import {User} from "./User"。Node.js执行时找不到无后缀的./User文件(实际存在的是User.js),因此抛出"Cannot find module"错误。

解决方法

方法1:调整TypeScript模块配置(推荐)

修改tsconfig.json中的module和moduleResolution为node16或nodenext,这是TypeScript为Node.js ES模块量身设计的解析模式,会自动处理后缀转换:

{
  "compilerOptions": {
    "rootDirs": ["src"],
    "outDir": "dist",
    "lib": ["es2020"],
    "target": "esnext",
    "module": "node16", // 替换为node16或nodenext
    "moduleResolution": "node16", // 同步修改此处
    "esModuleInterop": true,
    "types": ["node"]
  }
}

修改后,你在.ts文件中无需添加后缀,TypeScript编译时会自动将./User转换为./User.js,Node.js就能正确识别文件。

方法2:手动添加.js后缀(临时方案)

在index.ts的导入语句中直接添加.js后缀:

import {User} from "./User.js";

TypeScript会自动识别该路径指向User.ts文件,编译后路径保持为./User.js,Node.js可正常执行。但这种写法不符合TypeScript的常规习惯,仅适合临时测试。

为什么教程里没提?

多数旧教程使用的是CommonJS模块规范(package.json未设置"type": "module"),CommonJS允许省略文件后缀,因此无需添加。而现在ES模块是主流规范,新项目普遍启用"type": "module",这就需要遵循Node.js的严格规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:35:11