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

导出TypeScript常规Enum引发MODULE_NOT_FOUND错误的排查与解决

常规Enum导入报错的原因与修复方案

核心原因

常规Enum与const enum的编译输出逻辑存在本质差异:

  • const enum在编译阶段会被直接替换为字面量,不会生成独立的JavaScript代码,仅靠类型定义文件(.d.ts)就能满足类型检查需求。
  • 常规Enum会被编译成真实的JavaScript对象,其他项目导入时,不仅需要.d.ts类型文件,还必须存在对应的JS编译产物。如果你的类型包只发布了类型文件,没有包含编译后的JS代码,运行时就会出现"找不到模块"的错误。

之前调整moduleResolution和preserveConstEnums无效,是因为这些配置不影响常规Enum对JS产物的依赖——preserveConstEnums只是让const enum额外保留JS对象,和常规Enum的问题无关。

修复步骤

1. 确保类型包正确输出JS产物

检查类型包的tsconfig.json,配置以下关键项:

{
  "compilerOptions": {
    "declaration": true, // 生成.d.ts类型文件
    "outDir": "./dist", // 指定编译产物输出目录
    "module": "ESNext", // 或CommonJS,根据项目模块规范选择
    "target": "ES6"
  },
  "include": ["src/**/*"] // 指定要编译的源文件范围
}

执行tsc编译后,确认dist目录下同时存在.js和.d.ts文件(比如colors.js和colors.d.ts)。

2. 配置package.json入口字段

在类型包的package.json中明确指定入口文件:

{
  "name": "@your-org/color-types",
  "main": "./dist/colors.js", // 指向JS产物入口
  "types": "./dist/colors.d.ts", // 指向类型定义入口
  "module": "./dist/colors.js" // 若使用ES模块,可额外添加该字段
}

3. 确保发布包包含JS产物

检查类型包的.npmignore或package.json的files字段,确保编译后的JS产物被包含在发布内容中:

{
  "files": [
    "dist/**/*"
  ]
}

避免只发布.d.ts文件,导致其他项目运行时找不到实际的JS模块。

4. 验证导入路径正确性

其他项目导入时,使用包名而非相对路径引用未编译的源文件:

// 正确写法
import { Colors } from '@your-org/color-types';

// 错误写法(不要直接引用源文件)
import { Colors } from '../color-types/src/colors';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:34:58