·

tsc

TypeScript 官方编译器 CLI,由 npm 包 typescript 提供(npm i -D typescript 后通过 npx tsc 或项目 node_modules/.bin/tsc 调用)。两个核心职责:

  1. 类型检查——全程序静态分析,报错即退出码非 0(CI 门禁的核心用途)
  2. emit 产物——输出降级后的 JS、.d.ts 声明文件、source map

常用命令

命令说明
tsc按当前目录 tsconfig.json 编译整个项目
tsc --noEmit只做类型检查不产出文件,CI 标配(转译交给 Vite/esbuild 时)
tsc -b / tsc --buildBuild 模式:按 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 临时指定编译器版本