当前位置:网站首页>[TypeScript]编译配置
[TypeScript]编译配置
2022-07-30 18:35:00 【十八岁讨厌编程】
博客主页:️十八岁讨厌编程️
所属专栏:TypeScript专栏
写文目的:记录学习中的知识点
*目前已更新内容涵盖:【前端】、【后端】、【人工智能】、【数据分析】、【网络爬虫】、【数据结构与算法】、【PS】、【计算机数学】等几个大方面
如果这篇文章对你有帮助,欢迎️关注、点赞、收藏、留言,看到我会积极回复。

编译配置
自动编译文件
编译文件时,使用 -w 指令后,TS编译器会自动监视文件的变化,并在文件发生变化时对文件进行重新编译。
示例:
tsc xxx.ts -w
自动编译整个项目
如果直接使用tsc指令,则可以自动将当前项目下的所有ts文件编译为js文件。
但是能直接使用tsc命令的前提时,要先在项目根目录下创建一个ts的配置文件 tsconfig.json
tsconfig.json是一个JSON文件,添加配置文件后,只需 tsc 命令即可完成对整个项目的编译
配置选项:
include定义希望被编译文件所在的目录
默认值:[“**/*”]
示例:
"include":["src/**/*", "tests/**/*"]上述示例中,所有src目录和tests目录下的文件都会被编译
**代表任意目录*代表任意文件
exclude定义需要排除在外的目录
默认值:[“node_modules”, “bower_components”, “jspm_packages”]
示例:
"exclude": ["./src/hello/**/*"]上述示例中,src下hello目录下的文件都不会被编译
extends定义被继承的配置文件
示例:
"extends": "./configs/base"上述示例中,当前配置文件中会自动包含config目录下base.json中的所有配置信息
files指定被编译文件的列表,只有需要编译的文件少时才会用到
示例:
"files": [ "core.ts", "sys.ts", "types.ts", "scanner.ts", "parser.ts", "utilities.ts", "binder.ts", "checker.ts", "tsc.ts" ]列表中的文件都会被TS编译器所编译
compilerOptions编译选项是配置文件中非常重要也比较复杂的配置选项
在compilerOptions中包含多个子选项,用来完成对编译的配置
项目选项
target设置ts代码编译的目标版本
可选值:
- ES3(默认)、ES5、ES6/ES2015、ES7/ES2016、ES2017、ES2018、ES2019、ES2020、ESNext
示例:
"compilerOptions": { "target": "ES6" }- 如上设置,我们所编写的ts代码将会被编译为ES6版本的js代码
- 如果我们实在不记得,可以随便写一个值,然后通过报错来确定:

lib指定代码运行时所包含的库(宿主环境)
可选值:
- ‘es5’, ‘es6’, ‘es2015’, ‘es7’, ‘es2016’, ‘es2017’, ‘es2018’, ‘es2019’, ‘es2020’, ‘esnext’, ‘dom’, ‘dom.iterable’, ‘webworker’, ‘webworker.importscripts’, ‘webworker.iterable’, ‘scripthost’, ‘es2015.core’, ‘es2015.collection’, ‘es2015.generator’, ‘es2015.iterable’, ‘es2015.promise’, ‘es2015.proxy’, ‘es2015.r
eflect’, ‘es2015.symbol’, ‘es2015.symbol.wellknown’, ‘es2016.array.include’, ‘es2017.object’, ‘es2017.sharedmemory’, ‘es2017.string’, ‘es2017.intl’, ‘es2017.typedarrays’, ‘es2018.asyncgenerator’, ‘es2018.asynciterable’, ‘es2018.intl’, ‘es2018.promise’, ’
es2018.regexp’, ‘es2019.array’, ‘es2019.object’, ‘es2019.string’, ‘es2019.symbol’, ‘es2020.bigint’, ‘es2020.promise’, ‘es2020.sharedmemory’, ‘es2020.string’, ‘es2020.symbol.wellknown’, ‘es2020.intl’, ‘esnext.array’, ‘esnext.symbol’, ‘esnext.asynciterable’, ‘esnext.intl’, ‘esnext.bigint’, ‘esnext.string’, ‘esnext.promise’, ‘esnext.weakref’
- ‘es5’, ‘es6’, ‘es2015’, ‘es7’, ‘es2016’, ‘es2017’, ‘es2018’, ‘es2019’, ‘es2020’, ‘esnext’, ‘dom’, ‘dom.iterable’, ‘webworker’, ‘webworker.importscripts’, ‘webworker.iterable’, ‘scripthost’, ‘es2015.core’, ‘es2015.collection’, ‘es2015.generator’, ‘es2015.iterable’, ‘es2015.promise’, ‘es2015.proxy’, ‘es2015.r
示例:
"compilerOptions": { "target": "ES6", "lib": ["ES6", "DOM"], "outDir": "dist", "outFile": "dist/aa.js" }
同样如果不记得,可以随便写一个值,然后通过报错来确定:

module设置编译后代码使用的模块化系统
可选值:
- CommonJS、UMD、AMD、System、ES2020、ESNext、None
示例:
"compilerOptions": { "module": "CommonJS" }
outDir编译后文件的所在目录
默认情况下,编译后的js文件会和ts文件位于相同的目录,设置outDir后可以改变编译后文件的位置
示例:
"compilerOptions": { "outDir": "dist" }设置后编译后的js文件将会生成到dist目录
outFile将所有的文件编译为一个js文件
默认会将所有的编写在全局作用域中的代码合并为一个js文件,如果module制定了None、System或AMD则会将模块一起合并到文件之中
示例:
"compilerOptions": { "outFile": "dist/app.js" }- 以这段代码为例

- 执行结果:

这种功能我们一般结合打包工具来做,所以这个只需了解即可
rootDir指定代码的根目录,默认情况下编译后文件的目录结构会以最长的公共目录为根目录,通过rootDir可以手动指定根目录
示例:
"compilerOptions": { "rootDir": "./src" }
allowJs- 是否对js文件编译
- 功能演示:
- 未配置此项之前对src下文件进行编译,并用outDir指定编译后文件所在目录:

- 结果:

- 配置之后结果:

- 未配置此项之前对src下文件进行编译,并用outDir指定编译后文件所在目录:
checkJs是否对js文件进行检查
也就是说是否在js文件中按照ts的规范进行文件检查
示例:
"compilerOptions": { "allowJs": true, "checkJs": true }- 开启之后我们即使是在js文件中,以下代码也会报错:

removeComments- 是否删除注释
- 也就是说对ts文件进行编译的时候,不会再把注释内容照搬进编译完成的js文件
- 默认值:false
noEmit- 不对代码进行编译
- 这个用的少,有的时候我们可能只是想检查一下我们文件中的ts语法,此时可能会用到
- 默认值:false
noEmitOnError- 当有错误时不生成编译后的文件
- 默认值:false
sourceMap- 是否生成sourceMap
- 默认值:false
严格检查
strict- 启用所有的严格检查,默认值为true,设置后相当于开启了所有的严格检查
alwaysStrict- 用来设置编译后的文件是否使用严格模式
- 总是以严格模式对代码进行编译
- 效果:当我们把它设为true之后,编译后的文件:

- 如果此文件使用了引入导出,则本身就已经处于严格模式!
noImplicitAny- 禁止隐式的any类型
noImplicitThis- 禁止类型不明确的this
strictBindCallApply- 严格检查bind、call和apply的参数列表
strictFunctionTypes- 严格检查函数的类型
strictNullChecks- 严格的空值检查
strictPropertyInitialization- 严格检查属性是否初始化
额外检查
noFallthroughCasesInSwitch- 检查switch语句包含正确的break
noImplicitReturns- 检查函数没有隐式的返回值
noUnusedLocals- 检查未使用的局部变量
noUnusedParameters- 检查未使用的参数
高级
allowUnreachableCode- 检查不可达代码
- 可选值:
- true,忽略不可达代码
- false,不可达代码将引起错误
noEmitOnError- 有错误的情况下不进行编译
- 默认值:false
完整配置样例
目录结构:
tsconfig.json:
{
/* tsconfig.json是ts编译器的配置文件,ts编译器可以根据它的信息来对代码进行编译 "include" 用来指定哪些ts文件需要被编译 路径:** 表示任意目录 * 表示任意文件 "exclude" 不需要被编译的文件目录 默认值:["node_modules", "bower_components", "jspm_packages"] */
"include": [
"./src/**/*"
],
// "exclude": [
// "./src/hello/**/*"
// ]
/* compilerOptions 编译器的选项 */
"compilerOptions": {
// target 用来指定ts被编译为的ES的版本
// 'es3', 'es5', 'es6', 'es2015', 'es2016', 'es2017', 'es2018', 'es2019', 'es2020', 'esnext'
"target": "es2015",
// module 指定要使用的模块化的规范
// 'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015', 'es2020', 'esnext'
"module": "es2015",
// lib用来指定项目中要使用的库
//'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'es
//2018', 'es2019', 'es2020', 'esnext', 'dom', 'dom.iterable', 'webworker', 'webworker.importscripts', 'webworker.iterable', 'scri
//pthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.r
//eflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory', 'es2017.st
//ring', 'es2017.intl', 'es2017.typedarrays', 'es2018.asyncgenerator', 'es2018.asynciterable', 'es2018.intl', 'es2018.promise', '
//es2018.regexp', 'es2019.array', 'es2019.object', 'es2019.string', 'es2019.symbol', 'es2020.bigint', 'es2020.promise', 'es2020.s
//haredmemory', 'es2020.string', 'es2020.symbol.wellknown', 'es2020.intl', 'esnext.array', 'esnext.symbol', 'esnext.asynciterable
//', 'esnext.intl', 'esnext.bigint', 'esnext.string', 'esnext.promise', 'esnext.weakref'
// "lib": ["es6", "dom"]
// outDir 用来指定编译后文件所在的目录
"outDir": "./dist",
// 将代码合并为一个文件
// 设置outFile后,所有的全局作用域中的代码会合并到同一个文件中
//"outFile": "./dist/app.js"
// 是否对js文件进行编译,默认是false
// "allowJs": true,
// 是否检查js代码是否符合语法规范,默认是false
// "checkJs": true,
// 是否移除注释
"removeComments": true,
// 不生成编译后的文件
"noEmit": false,
// 当有错误时不生成编译后的文件
"noEmitOnError": true,
// 所有严格检查的总开关
"strict": true,
// 用来设置编译后的文件是否使用严格模式,默认false
"alwaysStrict": true,
// 不允许隐式的any类型
"noImplicitAny": true,
// 不允许不明确类型的this
"noImplicitThis": true,
// 严格的检查空值
"strictNullChecks": true
}
}
边栏推荐
- 【HMS core】【FAQ】Account Kit、MDM能力、push Kit典型问题合集6
- DM8:单库单实例搭建本地数据守护服务
- LeetCode Exercise - Two Questions About Finding Sum of Array Elements
- 使用postman调接口报Content type ‘text/plain;charset=UTF-8‘ not supported
- 微博广告分布式配置中心的构建与实践(有彩蛋)
- MySQL data types
- 【Swords Offer】Swords Offer 17. Print n digits from 1 to the largest
- 自然语言处理nltk
- ROS 环境使用第三方动态链接库(.so)文件
- 【开发者必看】【push kit】推送服务典型问题合集3
猜你喜欢

好未来单季营收2.24亿美元:同比降84% 张邦鑫持股26.3%

Immersive experience iFLYTEK 2022 Consumer Expo "Official Designated Product"

微博广告分布式配置中心的构建与实践(有彩蛋)

攻防世界web-Cat
![[Summary] 1396- 60+ VSCode plugins to create a useful editor](/img/e4/65e55d0e4948c011585b72733d4d19.jpg)
[Summary] 1396- 60+ VSCode plugins to create a useful editor

软件测试13年从业经验的前辈,总结的5条测试就业建议....

深化校企合作 搭建技术技能人才成长“立交桥”

Read the "Language Model" in one article

延时队列优化 (2)

国轩高科瑞交所上市:募资近7亿美元 为瑞士今年最大融资项目
随机推荐
网络基础(三)01-网络的基础概念——URL地址组成之协议、主机地址、路径和参数&127.0.0.1本地回环地址& 查看网址IP地址并访问之ping空格+网址&netstat -anb查看本机占用端口
【PHPWord】Quick Start of PHPWord in PHPOffice Suite
AI Basics: Graphical Transformer
MYSQL (Basic) - An article takes you into the wonderful world of MYSQL
scrapy基本使用
CCNA-NAT协议(理论与实验练习)
【HarmonyOS】【FAQ】鸿蒙问题合集3
ByteArrayInputStream 类源码分析
Application of time series database in the field of ship risk management
生物医学论文有何价值 论文中译英怎样翻译效果好
【Pointing to Offer】Pointing to Offer 22. The kth node from the bottom in the linked list
基于inquirer封装一个控制台文件选择器
好未来单季营收2.24亿美元:同比降84% 张邦鑫持股26.3%
3D机器视觉厂商的场景争夺战役
AI基础:图解Transformer
arcpy获取要素类(属性表)包含的数目
积性函数
After 23 years of operation, the former "China's largest e-commerce website" has turned yellow...
【Qt Designer工具的使用】
Codeblocks + Widgets 创建窗口代码分析
