Typescript学习(二):编译选项
配置选项:
include:定义希望被编译文件所在的目录,【**/*】表示:所有目录下的所有文件。
exclude:定义需要排除在外的目录。
ectends:定义被继承的配置文件(类似import)。
files:指定被编译文件的列表(只有需要编译的文件少时才会用到)。
![](https://img-blog.csdnimg.cn/img_convert/af55f6920e645cf41f2e4a00005ae8c9.png)
compilerOptions:编译选项,是配置文件中比较重要的配置选项,包含多个子选项,用来完成对编译的配置。
编译选项:
target:设置ts代码编译的目标版本。
lib:指定代码运行时所包含的库(默认不写,表示全部)。
![](https://img-blog.csdnimg.cn/img_convert/d0602cb883dc87e77939ea5f22517137.png)
module:指定要使用的模块化的规范。
![](https://img-blog.csdnimg.cn/img_convert/716047057de761624e42afbaeb9f119a.png)
outDir:用来指定编译后文件所在的目录。
outFile:将所有全局作用域中的代码合并到一个文件中。
![](https://img-blog.csdnimg.cn/img_convert/19928ed3869ff922ada51d20dcae9b06.png)
allowJs:是否对js文件进行编译,默认是false、
checkJs:是否检查js代码是否符合愈发规范,默认是false、
removeComments:ts编译为js的时候是否移除注释、
noEmit:不生成编译后的文件(只执行过程,有时候不想编译为js,只为了检查下语法、
noEmitError:当有错误时不生成编译后的文件、
![](https://img-blog.csdnimg.cn/img_convert/83cbadb21eb3fa796aad0fe830069d84.png)
对编译器检查的一些配置:
![](https://img-blog.csdnimg.cn/img_convert/70a72530c01cce6941c5568239d5d937.png)
strict:false --这个strict相关标志位的一个总开关, 设置为true会启用全部compilerOptions.strict开头的选项和其他相关的选项, 如compilerOptions.strictNullChecks, compilerOptions.strictPropertyInitialization, compilerOptions.noImplicitAny ...开启此选项后, 依然可以单独关闭某个具体的以compilerOptions.strict开头的选项。
strictPropertyInitialization:开启此选项让 typescript 严格的对象属性初始化检查。
![](https://img-blog.csdnimg.cn/img_convert/e8f2fe551aee565a21caed868aeab7db.png)
strictBindCallApply:开启此选项后,调用函数对象的 bind call和apply 方法时ts会执行参数类型检查确保参数类型兼容。
![](https://img-blog.csdnimg.cn/img_convert/fffc2fe954e4a43400d3e0cfb0e9197a.png)
strictFunctionTypes:开启此选项会启用严格的函数类型检查。
![](https://img-blog.csdnimg.cn/img_convert/16ef6c3cfa26c8bf969286a661377ca1.png)
strictNullChecks:true --严格的检查空值。
比如(box1或为空值):
![](https://img-blog.csdnimg.cn/img_convert/23f7656104d0aa17e7f8ffdd3c5a52e9.png)
更正后可用:
![](https://img-blog.csdnimg.cn/img_convert/aeab08e01b32ad79de688769bcbb75d7.png)
alwaysStrict:用来设置编译后的文件是否使用严格模式,默认false(设置为true后,js文件中会多- "use Strict"-如果文件中有export--则无"use Strict)。
noImplicitOverride:Ts4.3引入的配置,开启此选项保证子类重写基类的方法是,必须在方法前加上override关键词。
![](https://img-blog.csdnimg.cn/img_convert/e322b19727169fb77c38627fc7c44d1b.png)
noImplicitReturns:开启这个选项保证编译时所有条件分支都返回一致的类型。
![](https://img-blog.csdnimg.cn/img_convert/60387e0147d5ef35a1a87265b67bb9bf.png)
noProertyAccessFromIndexSignature:从名称入手来理解这个配置, no property access from index signature, 就是说开启后禁止通过访问常规属性的方法来访问index signature声明的属性
常规属性通过在对象后加一个.即可访问如obj.title。
noUncheckedIndexedAccess:开启这个选项, typescript自动给索引签名语法声明的属性补上一个undefined类型; 上面介绍compilerOptions.noPropertyAccessFromIndexSignature时提到可以自己手动给索引签名语法声明的属性加上undefined类型标注达到和开启compilerOptions.noPropertyAccessFromIndexSignature相同的目的。
![](https://img-blog.csdnimg.cn/img_convert/bd9898f1c9e82d66f200027e070e96a5.png)
noImplicitAny:true --不允许隐式的any类型,这个配置还是比较好理解的, 就是开启此选项后, 如果你声明一个没有标注类型的变量, 编译器会会给你一个编译时错误(Parameter 'arg' implicitly has an 'any' type.)。
例如:
![](https://img-blog.csdnimg.cn/img_convert/4f95404d759464b01cfb998b147e4601.png)
noImplicitThis:true --不允许不明确类型的this,开启这个选项后, typescript将禁止调用any类型的this。
例如:
![](https://img-blog.csdnimg.cn/img_convert/02872c750a99ac117ac9a8e481f64515.png)
更正后可用:
![](https://img-blog.csdnimg.cn/img_convert/98c6d1850048e0ca0b0d1a8fdf7ea46b.png)
allowUnreachableCode:表示是否允许代码中出现永远无法被执行到的代码;可选值是:undefined、false、true。
![](https://img-blog.csdnimg.cn/img_convert/c5a7398bfc39f8496071aecef07114b3.png)
allowUnusedLabels:表示是否允许未使用到的标签;
可选项: undefined:默认值,碰未使用的标签给出warning警告;
false:碰到未使用过的标签抛出错误,编译失败;
true:碰到未使用过的标签编译通过,且不给出异常。
![](https://img-blog.csdnimg.cn/img_convert/1c1b8f0c63bcc1399b7771d94935dcb0.png)
exactOptionalProperties:默认处于不开启状态; 开启此选项, typescript会对可空属性执行更严格的类型检查, 可空属性只有在初始化时可以留空为undefined, 但是不能被手动设置为undefined
![](https://img-blog.csdnimg.cn/img_convert/3983f4f10697dc184d4be1e3e2f01945.png)
downlevellterration:Downleveling是Typescript中的一个术语, 它表示将typescript代码转译为相对更低版本的javascript。这个标志位模式是不开启的.
开启这个标志位typescript会生成一个帮助方法来对es6中的for of和数组展开([...arr])语法进行 转译, 以兼容 es3/es5。
![](https://img-blog.csdnimg.cn/img_convert/7c066a6038e5521c9ce4f1e311a79d1a.png)
![](https://img-blog.csdnimg.cn/img_convert/1cab7d5f13aa2ec395921701312c74a5.png)
importHelpers:开启compilerOptions.importHelpers后会对for...of之类的迭代语法糖进行downleveling; typescript进行downleveling时, 会生成一些辅助方法, 默认情况下, 这些辅助代码是会直接插入到文件中对应的位置的, 这会生成的javascript存在重复的辅助方法从而造成代码文件体积过大的问题;不在插入具体的辅助方法的代码到对应的位置, 而是通过模块导入来引用typescript的辅助方法。
noUnusedLocals:开启后,当Ts发现未使用的局部变量时,会给出一个编译时错误('<propertyName>' is declared but its value is never read.(6133))。
![](https://img-blog.csdnimg.cn/img_convert/4d8a9694552d8cb901c60c0d0c4368cb.png)
noUnusedParameters:和上面的compilerOptions.noUnusedLocals, 不同之处在于局部变量变成了函数参数。
![](https://img-blog.csdnimg.cn/img_convert/3b6a298d24079f667e5f43819c10548c.png)
useUnKnownInCatchVariables:开启这个选项typescript会将catch语法块中的err变量当做unknown来处理, 不开启此选项时, err变量是被当做any类型来处理的, 这很容易造成经典的read property of undefined运行时异常
一个简单的示例, 不开启compilerOptions.useUnknownInCatchVariables选项运行时才能发布异常。
![](https://img-blog.csdnimg.cn/img_convert/9dfcda347e3f7f879be0f8d60ac56fea.png)
相关文章
- 【Pthon100天学习笔记】Day19 面向对象基础
- 众安天下发布新一代SaaS安全服务平台
- MLFlow︱机器学习工作流框架:介绍(一)
- MLFlow︱机器学习工作流框架:MLFlow docker 实践(二)
- 机器学习模型可解释性进行到底 —— SHAP值理论(一)
- 机器学习模型可解释性进行到底 —— 从SHAP值到预测概率(二)
- 机器学习模型可解释性进行到底 ——PDP&ICE图(三)
- 云计算十年:序章,拐点,生死战
- 机器学习模型可解释性进行到底——特征重要性(四)
- 产业数智化赋能的云原生平台 为京东11.11保驾护航
- 腾讯推出WeMap,开启全新的产业互联网地图时代
- 构建有利于托管的混合云的四种方法
- 2021年五大云计算趋势
- 普华永道中国联合华为云发布汽车与金融两大数字化解决方案
- IDC 2020中国云厂商安全能力报告:阿里云稳居领导者地位
- 借微软平台搭建云端智能供应链,避免再次出现“脱销”的窘境
- 基于路网数字化,华为云IoT构建协作式的智能交通
- 如何实施云迁移策略的优秀实践
- 宅家也能逛展会! 华为云助力世界VR产业大会云峰会顺利举办
- 【Python100天学习笔记】Day16 Python基础重要知识点