30. tsc 命令行编译器
约 2015 字大约 7 分钟
2025-05-02
一、简介
tsc 是 TypeScript 官方的命令行编译器,用来检查代码,并将其编译成 JavaScript 代码。
tsc 默认使用当前目录下的配置文件 tsconfig.json
,但也可以接受独立的命令行参数。命令行参数会覆盖 tsconfig.json
,比如命令行指定了所要编译的文件,那么 tsc 就会忽略 tsconfig.json
的 files
属性。
二、安装
tsc 是一个 npm 模块,使用下面的命令安装(必须先安装 npm)。
$ npm install -g typescript
上面命令是全局安装 tsc,也可以在项目中将 tsc 安装为一个依赖模块。
安装完成后,检查一下是否安装成功。
# 或者 tsc --version
$ tsc -v
Version 5.1.6
上面命令中,-v
或 --version
参数可以输出当前安装的 tsc 版本。
三、使用
1、帮助信息
-h
或 --help
参数输出帮助信息。
$ tsc -h
默认情况下,--help
参数仅显示基本的可用选项。我们可以使用 --all
参数,查看完整的帮助信息。
$ tsc --all
2、编译脚本
安装 tsc 之后,就可以编译 TypeScript 脚本了。
tsc
命令后面,加上 TypeScript 脚本文件,就可以将其编译成 JavaScript 脚本。
$ tsc app.ts
上面命令会在当前目录下,生成一个 app.js
脚本文件,这个脚本就完全是编译后生成的 JavaScript 代码。
tsc
命令也可以一次编译多个 TypeScript 脚本。
$ tsc file1.ts file2.ts file3.ts
上面命令会在当前目录生成三个 JavaScript 脚本文件 file1.js
、file2.js
、file3.js
。
tsc 有很多参数,可以调整编译行为:
--outFile
:如果想将多个 TypeScript 脚本编译成一个 JavaScript 文件,使用--outFile
参数。$ tsc file1.ts file2.ts --outFile app.js
上面命令将
file1.ts
和file2.ts
两个脚本编译成一个 JavaScript 文件app.js
。outDir
:编译结果默认都保存在当前目录,--outDir
参数可以指定保存到其他目录。$ tsc app.ts --outDir dist
上面命令会在
dist
子目录下生成app.js
。--target
: 为了保证编译结果能在各种 JavaScript 引擎运行,tsc 默认会将 TypeScript 代码编译成很低版本的 JavaScript,即 3.0 版本(以es3
表示)。这通常不是我们想要的结果。这时可以使用
--target
参数,指定编译后的 JavaScript 版本。建议使用es2015
,或者更新版本。$ tsc --target es2015 app.ts
tsc 的基本用法如下:
# 使用 tsconfig.json 的配置
$ tsc
# 只编译 index.ts
$ tsc index.ts
# 编译 src 目录的所有 .ts 文件
$ tsc src/*.ts
# 指定编译配置文件
$ tsc --project tsconfig.production.json
# 只生成类型声明文件,不编译出 JS 文件
$ tsc index.js --declaration --emitDeclarationOnly
# 多个 TS 文件编译成单个 JS 文件
$ tsc app.ts util.ts --target esnext --outfile index.js
四、完整参数列表
tsc 的命令行参数,大部分与 tsconfig.json 的属性一一对应。
下面只是按照首字母排序,简单罗列出主要的一些参数,详细解释可以参考《tsconfig.json 配置文件》一章。
参数 | 作用 |
---|---|
--all | 输出所有可用的参数。 |
--allowJs | 允许 TS 脚本加载 JS 模块,编译时将 JS 一起拷贝到输出目录。 |
--allowUnreachableCode | 如果 TS 脚本有不可能运行到的代码,不报错。 |
--allowUnusedLabels | 如果 TS 脚本有没有用到的标签,不报错。 |
--alwaysStrict | 总是在编译产物的头部添加use strict 。 |
--baseUrl | 指定非相对位置的模块定位的基准 URL。 |
--build | 启用增量编译。 |
--checkJs | 对 JS 脚本进行类型检查。 |
--declaration | 为 TS 脚本生成一个类型生成文件。 |
--declarationDir | 指定生成的类型声明文件的所在目录。 |
--declarationMap | 为.d.ts 文件生成 SourceMap 文件。 |
--diagnostics | 构建后输出编译性能信息。 |
--emitBOM | 在编译输出的 UTF-8 文件头部加上 BOM 标志。 |
--emitDeclarationOnly | 只编译输出类型声明文件,不输出 JS 文件。 |
--esModuleInterop | 更容易使用 import 命令加载 CommonJS 模块。 |
--exactOptionalPropertyTypes | 不允许将可选属性设置为undefined 。 |
--experimentalDecorators | 支持早期的装饰器语法。 |
--explainFiles | 输出进行编译的文件信息。 |
--forceConsistentCasingInFileNames | 文件名大小写敏感,默认打开。 |
--help | 输出帮助信息。 |
--importHelpers | 从外部库(比如 tslib)输入辅助函数。 |
--incremental | 启用增量构建。 |
--init | 在当前目录创建一个全新的tsconfig.json 文件,里面是预设的设置。 |
--inlineSourceMap | SourceMap 信息嵌入 JS 文件,而不是生成独立的.js.map 文件。 |
--inlineSources | 将 TypeScript 源码作为 SourceMap 嵌入编译出来的 JS 文件。 |
--isolatedModules | 确保每个模块能够独立编译,不依赖其他输入的模块。 |
--jsx | 设置如何处理 JSX 文件。 |
--lib | 设置目标环境需要哪些内置库的类型描述。 |
--listEmittedFiles | 编译后输出编译产物的文件名。 |
--listFiles | 编译过程中,列出读取的文件名。 |
--listFilesOnly | 列出编译所要处理的文件,然后停止编译。 |
--locale | 指定编译时输出的语言,不影响编译结果。 |
--mapRoot | 指定 SourceMap 文件的位置。 |
--module | 指定编译生成的模块格式。 |
--moduleResolution | 指定如何根据模块名找到模块的位置。 |
--moduleSuffixes | 指定模块文件的后缀名。 |
--newLine | 指定编译产物的换行符,可以设为crlf 或者lf 。 |
--noEmit | 不生成编译产物,只进行类型检查。 |
--noEmitHelpers | 不在编译产物中加入辅助函数。 |
--noEmitOnError | 一旦报错,就停止编译,没有编译产物。 |
--noFallthroughCasesInSwitch | Switch 结构的case 分支必须有终止语句(比如break )。 |
--noImplicitAny | 类型推断只要为any 类型就报错。 |
--noImplicitReturns | 函数内部没有显式返回语句(比如return )就报错。 |
--noImplicitThis | 如果this 关键字是any 类型,就报错。 |
--noImplicitUseStrict | 编译产生的 JS 文件头部不添加use strict 语句。 |
--noResolve | 不进行模块定位,除非该模块是由命令行传入。 |
--noUnusedLocals | 如果有未使用的局部变量就报错。 |
--noUnusedParameters | 如果有未使用的函数参数就报错。 |
--outDir | 指定编译产物的存放目录。 |
--outFile | 所有编译产物打包成一个指定文件。 |
--preserveConstEnums | 不将const enum 结构在生成的代码中,替换成常量。 |
--preserveWatchOutput | watch 模式下不清屏。 |
--pretty | 美化显示编译时的终端输出。这是默认值,但是可以关闭--pretty false 。 |
--project (或者-p ) | 指定编译配置文件,或者该文件所在的目录。 |
--removeComments | 编译结果中移除代码注释。 |
--resolveJsonModule | 允许加载 JSON 文件。 |
--rootDir | 指定加载文件所在的根目录,该目录里面的目录结构会被复制到输出目录。 |
--rootDirs | 允许模块定位时,多个目录被当成一个虚拟目录。 |
--skipDefaultLibCheck | 跳过 TypeScript 内置类型声明文件的类型检查。 |
--skipLibCheck | 跳过.d.ts 类型声明文件的类型检查。这样可以加快编译速度。 |
--showConfig | 终端输出编译配置信息,而不进行配置。 |
--sourcemap | 为编译产生的 JS 文件生成 SourceMap 文件(.map 文件)。 |
--sourceRoot | 指定 SourceMap 文件里面的 TypeScript 源码根目录位置。 |
--strict | 打开 TypeScript 严格检查模式。 |
--strictBindCallApply | bind, call、apply 这三个函数的类型,匹配原始函数。 |
--strictFunctionTypes | 如果函数 B 的参数是函数 A 参数的子类型,那么函数 B 不能替代函数 A。 |
--strictNullChecks | 对null 和undefined 进行严格类型检查。 |
--strictPropertyInitialization | 类的属性必须进行初始值,但是允许在构造函数里面赋值。 |
--suppressExcessPropertyErrors | 关闭对象字面量的多余参数的报错。 |
--target | 指定编译出来的 JS 代码的版本,TypeScript 还会在编译时自动加入对应的库类型声明文件。 |
--traceResolution | 编译时在终端输出模块解析(moduleResolution)的具体步骤。 |
--typeRoots | 设置类型模块所在的目录,替代默认的node_modules/@types 。 |
--types | 设置typeRoots 目录下需要包括在编译之中的类型模块。 |
--version | 终端输出 tsc 的版本号。 |
--watch (或者-w ) | 进入观察模式,只要文件有修改,就会自动重新编译。 |
更新日志
e7112
-1于