Babel 处理 TypeScript 的核心是让 TS 仅做类型检查,语法转换全交由 Babel 完成;@babel/preset-typescript 仅擦除类型语法、不校验类型,无需 typescript 依赖和 tsconfig;Webpack 中用 babel-loader 替代 ts-loader 并启用缓存可显著提速;类型检查通过 tsc --noEmit 或插件分离执行;Babel 配置应精简,仅保留 preset-env 和 preset-typescript。

用 Babel 处理 TypeScript 的核心思路是:让 TypeScript 只做类型检查,把语法转换(擦除类型、降级语法)全交给 Babel。这样能绕过 tsc 编译器的完整流程,显著提速。
只擦除类型,不走类型检查
@babel/preset-typescript 的作用非常明确——它只是识别并删除 TypeScript 的类型相关语法(interface、type、const enum、参数/返回值类型注解等),不做任何类型校验。这意味着:
- 无需安装 typescript 运行时依赖(除非编辑器需要)
- 不需要 tsconfig.json 参与构建流程
- 没有类型错误阻断构建,开发阶段热更新更顺滑
Webpack 中用 babel-loader 替代 ts-loader
在 Webpack 配置里,把原本处理 .ts/.tsx 的 ts-loader 换成 babel-loader,是最直接的提速方式:
- 去掉
ts-loader和它隐式依赖的tsc启动开销 - 启用
cacheDirectory: true让 babel-loader 自动缓存编译结果 - 配合
include: path.resolve(__dirname, 'src')严格限制处理范围,避免扫描 node_modules
保留类型检查能力,但分离执行时机
速度提上来了,类型安全不能丢。推荐做法是:
- 用
tsc --noEmit或fork-ts-checker-webpack-plugin在构建后或单独进程中做类型检查 - VS Code 仍可读取
tsconfig.json提供智能提示和跳转 - CI 流程中加一步
npx tsc --noEmit确保提交代码类型正确
精简 preset,避免冗余处理
Babel 配置越轻量,解析和遍历 AST 越快。建议:
- 只保留
@babel/preset-env(控制目标环境语法降级)和@babel/preset-typescript(擦除类型) - 移除
@babel/preset-react等无关预设(除非项目真用 React) - Babel 7.25+ 已原生跳过
import type/export type,无需额外插件


















