TypeScript 编译选项

编译选项控制 tsc 如何把 TS 转成 JS:目标版本、输出目录、检查严格程度等。它们既可写在 tsconfig.json 里,也可作为命令行参数传入,命令行指定时优先级更高。本节介绍最常用的一批选项。

选项的两种使用方式

方式一:写在 tsconfig.json 的 compilerOptions 中(推荐,随项目保存):

{
  "compilerOptions": {
    "target": "ES2020",
    "outDir": "./dist"
  }
}

方式二:命令行临时指定(适合临时覆盖):tsc hello.ts --outDir ./out --target ES5

输出相关选项

选项作用示例
target编译到的 ES 版本ES5、ES2020、ESNext
module模块规范commonjs、esnext
outDir输出目录./dist
rootDir输入根目录./src
outFile合并输出为单文件(仅 amd/system 等)./bundle.js

简单示例——把 src/hello.ts 编译到 dist,目录结构保持 src 下的相对路径:

// src/hello.ts
let msg: string = "你好";
console.log(msg); // 输出:你好
tsc src/hello.ts --outDir dist
// 生成 dist/hello.js

严格检查选项

选项作用
strict一键开启全部严格检查
noImplicitAny禁止参数等隐式为 any
strictNullChecksnull/undefined 不能随意赋值
noUnusedLocals未使用的局部变量报错

开启 noImplicitAny 后,下面代码会编译报错;给参数补上类型 function show(msg: string) 即可通过:

// 开启 noImplicitAny 后编译报错
function show(msg) {      // 参数隐式为 any
    console.log(msg);
}
show("hi"); // error TS7006: Parameter 'msg' implicitly has an 'any' type

工程辅助选项

选项作用
sourceMap生成 .map 源码映射文件
declaration同时输出 .d.ts 类型声明
removeComments编译结果去掉注释
watch(-w)监听文件变化自动重编译
noEmit只做类型检查,不输出 JS

典型组合:调试用 sourceMap,发布库开 declaration,日常开发用 --watch:

tsc --watch                      // 改动即自动编译
tsc --declaration --sourceMap    // 输出声明与源码映射

编译结果示例

// app.ts —— 使用可选链等新语法
const user = { info: { age: 18 } };
console.log(user?.info?.age); // 输出:18

不同 target 的编译差异:tsc app.ts --target ES2020 保留可选链语法;tsc app.ts --target ES5 降级为兼容旧浏览器的写法。

常用组合建议

开发期:tsc --watch --sourceMap --strict(改动即自动编译)。 发布期:先 tsc --noEmit 做全量类型检查,再 tsc --declaration --removeComments 正式产出。

小结

编译选项围绕「输出、检查、工程辅助」三类展开:target/outDir 决定产物形态,strict 系列决定检查力度,sourceMap/declaration/watch 提升开发体验。建议把常用选项固化在 tsconfig.json 中统一管理。

笔记加载中…