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

如何配置TypeScript不编译仅含类型定义的导入模块?

解决TypeScript编译生成不必要类型文件的问题

问题原因

你当前配置里的exclude: ["types"]之所以没生效,是因为src/index.ts导入了types/types.ts——TypeScript会将被项目文件引用的文件纳入编译范围,exclude仅对未被引用的文件生效。

解决方案

以下三种方法都可以避免生成types.js:

方法1:配置typeRoots(推荐)

将types目录声明为TypeScript的类型根目录,TypeScript会自动把该目录下的文件当作类型定义文件处理,不会编译生成JS文件。

修改tsconfig.json,在compilerOptions中添加typeRoots配置:

{
  "compilerOptions": {
    "target": "es2016",
    "module": "commonjs",
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "skipLibCheck": true,
    "typeRoots": ["./types"]
  }
}

此时可以移除exclude中的"types",因为typeRoots已经明确了该目录的作用。

方法2:重命名类型文件为.d.ts

TypeScript默认将后缀为.d.ts的文件视为类型声明文件,不会编译生成对应的JS文件。只需把types/types.ts改名为types/types.d.ts,无需修改任何配置即可生效。

方法3:用include明确指定编译范围

通过include仅指定需要编译的src目录,即使index.ts导入了types.ts,TypeScript会识别它为类型依赖,不会编译生成JS文件:

{
  "compilerOptions": {
    "target": "es2016",
    "module": "commonjs",
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "skipLibCheck": true
  },
  "include": ["src/**/*"]
}

方法对比

  • typeRoots:最符合TypeScript类型组织规范,适合专门存放自定义类型的项目结构。
  • 改.d.ts:操作最简单,适合单个或少量类型文件的场景。
  • include:适合需要严格控制编译范围的项目,确保只有业务代码被编译。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 17:45:22