·
tsc
TypeScript 官方编译器 CLI,由 npm 包 typescript 提供(npm i -D typescript 后通过 npx tsc 或项目 node_modules/.bin/tsc 调用)。两个核心职责:
- 类型检查——全程序静态分析,报错即退出码非 0(CI 门禁的核心用途)
- emit 产物——输出降级后的 JS、
.d.ts声明文件、source map
常用命令
| 命令 | 说明 |
|---|---|
tsc | 按当前目录 tsconfig.json 编译整个项目 |
tsc --noEmit | 只做类型检查不产出文件,CI 标配(转译交给 Vite/esbuild 时) |
tsc -b / tsc --build | Build 模式:按 references 依赖顺序增量构建 monorepo 子项目 |
tsc -w / tsc --watch | 监听模式,文件变更增量重编译 |
tsc --init | 生成带注释的初始 tsconfig.json |
tsc -p <path> / --project | 指定 tsconfig 文件或目录 |
tsc file.ts | 编译单个文件,忽略 tsconfig,用默认配置 |
tsc --showConfig | 打印 tsconfig 解析合并后的最终有效配置(调试继承链必备) |
tsc --listFiles / --explainFiles | 列出参与编译的文件 / 解释每个文件为何被包含 |
tsc --traceResolution | 打印模块解析全过程(排查”找不到模块”类问题) |
tsc --version | 版本号 |
与 tsconfig.json 的关系
- 无文件参数时
tsc从当前目录向上查找tsconfig.json;命令行 flag 覆盖 tsconfig 中的同名配置 - 推荐把配置收敛在 tsconfig(团队共享、可
extends继承),命令行只传少量开关(--noEmit、-w、-b) - 配置细节见 tsconfig-json
与现代工具链的分工
现代项目普遍「转译与类型检查分离」:
| 工具 | 职责 |
|---|---|
tsc | 唯一做完整类型检查的官方工具 |
| esbuild / swc / Vite | 只做单文件转译(丢弃类型信息),速度快 10-100x,不做类型检查 |
| ts-node / tsx | 运行时动态转译执行 .ts,开发调试用 |
因此典型组合是:Vite/esbuild 负责开发热更和打包,tsc --noEmit 在 CI 或 pre-commit 做类型门禁(对应 tsconfig 里 noEmit: true + isolatedModules: true)。库发布需要 .d.ts 时仍由 tsc(declaration: true)产出。
TS 7.0:Go 原生编译器(2026-07)
- 2026-07-08 TypeScript 7.0 稳定版发布:编译器从 TS 自举重写为 Go 原生实现,完整构建提速约 8-12x(VS Code 源码库实测 125.7s → 10.6s),内存下降约 18%
- 类型语义与 TS 6.0 完全一致,
npm i -D typescript后入口仍是tsc,用法不变 - 预览期曾用独立包
@typescript/native-preview+tsgo命令;需要 TS6 compiler API(程序化调用require("typescript"))的工具链(如 typescript-eslint、ts-loader)可 side-by-side 共存 - 编辑器侧基于 LSP + 多线程,VS Code 类型提示/跳转同步提速
相关
- tsconfig-json — tsc 的配置文件详解
- typescript-file-extensions — .ts/.mts/.cts 等文件后缀与模块系统
- swc — Rust 实现的转译器,替代 tsc 转译职责(不含类型检查)
- esbuild — Go 实现的极速转译器,同样的分工定位
- npx-quickstart — 用
npx typescript@x.y tsc临时指定编译器版本