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

如何在NPM创建仅导出类型的包?解决ts(2306)模块错误

解决纯类型NPM/Monorepo包的TS2306模块错误

一、修正package.json配置

纯类型包无需JS运行时入口,需移除冗余字段,保留类型专属配置:

{
  "name": "@acme/types",
  "type": "module",
  "types": "./index.d.ts",
  "exports": {
    ".": {
      "types": "./index.d.ts"
    },
    "./package.json": "./package.json"
  },
  "sideEffects": false
}
  • type: "module":明确包为ES模块,适配现代TypeScript模块解析逻辑
  • types:指定TypeScript类型入口文件
  • exports:仅暴露类型入口,避免JS模块解析混淆
  • sideEffects: false:告知打包工具该包无运行时副作用,优化构建流程

二、调整TypeScript配置

1. 根目录tsconfig.json配置

{
  "compilerOptions": {
    "moduleResolution": "NodeNext", // 或"bundler",根据项目构建工具选择
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true
  },
  // Monorepo场景需添加include,确保类型文件被识别
  "include": ["packages/types/**/*.d.ts"]
}

2. Monorepo路径映射(可选)

如果使用pnpm/yarn/npm workspace,可在根tsconfig中添加路径映射,让TypeScript快速定位包:

{
  "compilerOptions": {
    "paths": {
      "@acme/types": ["./packages/types/index.d.ts"]
    }
  }
}

三、验证文件内容与结构

确保index.d.ts的模块导出语法正确(你的原内容符合要求,再次确认):

export type MyType = {
  name: string;
};

若改用index.ts作为源文件,需在包的tsconfig中开启declaration: true,并将package.json的types指向编译生成的index.d.ts,但纯类型场景更推荐直接使用index.d.ts。

四、重新链接/安装包

  • Monorepo场景:执行包管理工具安装命令(如pnpm install/yarn install),确保包被正确链接到工作区
  • 独立包场景:重新将包安装到目标项目中

错误原因分析

  • 原配置中main字段指向.d.ts文件,导致Node.js尝试将其作为JS模块加载,引发解析混乱
  • exports中多余的default/import入口,混淆了JS模块与类型模块的解析逻辑
  • TypeScript模块解析策略未适配ES模块,无法识别类型文件的模块身份

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:43:34