tsconfig之strict严格模式相关
strict 作用
TypeScript
中的严格模式跟 JavaScript
中说的严格模式(即 use strict
)不是一个概念,它表示是否开启下面一系列的类型检查规则:
"noImplicitAny": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"strictBindCallApply": true,
"strictPropertyInitialization": true,
"noImplicitThis": true,
"alwaysStrict": true
- 如果你设置
strict
为true
的话,那么上面所有的配置默认全是true
- 如果你设置
strict
为false
的话,那么上面的所有配置默认全是false
- 你如果既设置了
strict
又单独设置了其中的部分配置,那么以单独设置的配置为准
strictNullChecks
默认情况下,null
和 undefined
可以被赋值给其它任意类型,因为 null
和 undefined
是任何类型的子类型。
当 strictNullChecks
配置为 false
时,下面的代码不会提示报错。
let age: number = undefined
age = null
age = 18
age = undefined
export {}
当 strictNullChecks
配置为 true
时,上面的代码会提示报错,
它告诉我们不能将 undefined
赋值给 number
类型。
TS2322: Type 'undefined' is not assignable to type 'number'.
当我们开启 strictNullChecks
时,null
和 undefined
就不能赋值给任何类型了,对于它们的校验相当于开启了严格模式
noImplicitAny
如下代码,我们定义了一个函数 test
,并且它有一个参数 a
,但是我们并没有显式的给 a
定义类型,这时 typescript
将自动推导 a
的类型为 any
,
相当于给 a
隐式的加了 any
类型。
如果 noImplicitAny
配置为 false
,下面这段代码能够正常运行,但当我们给 noImplicitAny 配置为 true 时,下面这段代码将提示 TS7006: Parameter 'a' implicitly has an 'any' type.
export function test (a) {return a
}
strictFunctionTypes
严格函数类型检查
如下代码
export const x: number | string = Math.random() > 0.5 ? '2020' : 2021;
const y: number = x;
将 number | string
类型的 x
赋值给 number
类型的 y
这是不被允许的
但是在函数中,这种形式却是可以的,回调函数中的 date
参数是 number | string
类型的,但是调用时,date
是 string
类型的,
当 strictFunctionTypes
没有开启时,typescript
认为是没有问题的
export function getCurrentYear(callback: (date: string | number) => void) {callback(Math.random() > 0.5 ? '2020' : 2020);
}getCurrentYear((date: string) => {console.log(date.charAt(0));
});
如果开启 strictFunctionTypes
为 true
,报错如下
strictBindCallApply 作用
严格绑定检查。意思是在使用 bind
、call
和 apply
语法的时候,是否进行参数检查
示例
如下代码,当 strictBindCallApply
未开启时,typescript
认为下列代码没有错误,但实际上,fnn
的两个参数都是必传的,显然这种提示是不合理的。
export function fnn (name: string, age: number) {return name + age;
}fnn.call(null, 'wfly');
fnn.apply(null, ['wfly']);
fnn.bind(null, 'wfly')();
当我们设置 strictBindCallApply
为 true
时,typescript
会对这种参数缺少进行报错,如下图所示
strictPropertyInitialization
该选项用于检查类的属性是否被初始化,如果开启则必须进行初始化,开启此属性需要 strictNullChecks
一并开启
示例
如下代码,当 strictPropertyInitialization
未开启时,此代码不会提示报错
export class Person {name: string;
}
当 strictPropertyInitialization
开启时,会提示 TS2564: Property 'name' has no initializer and is not definitely assigned in the constructor.
正确写法,给 name
赋一个初始值
export class Person {name: string = '';
}
noImplicitThis
是否允许出现隐式 any
类型的 this
示例
如下代码,getName
函数返回值是一个函数,其中这个函数的返回值中用到了 this,这个 this 是未知的, 当 noImplicitThis
未开启时,此代码不会提示报错
export class Person {name = '';constructor (_name: string) {this.name = _name;}getName () {console.log(this, this.name);return function () {console.log(this.name);};}
}new Person('小明').getName().call({ name: '小红' });
当 noImplicitThis
开启时,会提示如下报错
alwaysStrict
是否开启严格模式,开启的话编译后的 js
会带上 use strict
,之前是 js
文件的会带上,ts
编译为 js
没有带上。
tsconfig之strict严格模式相关相关推荐
- java严格模式_“use strict” 严格模式使用(前端基础系列)
ECMAscript5添加一种严格模式的运行模式("use strict"),让你的js语句在更加严格的环境下进行运行: 一.主要作用: 消除版本javascript中一些不合理及 ...
- “use strict” 严格模式使用(前端基础系列)
ECMAscript5添加一种严格模式的运行模式("use strict"),让你的js语句在更加严格的环境下进行运行: 一.主要作用: 消除版本javascript中一些不合理及 ...
- F2-网络模式相关命令
F2-网络模式&相关命令 1. 描述什么是桥接网络和nat网络模式,并写出两种网络模式的静态ip配置步骤: 2.练习相关命令,alias.cat.cp.mv.touch.mkdir.less. ...
- 代理模式相关简单论述
代理模式相关简单论述 1.代理模式的简述 代理模式 (英语:Proxy Pattern)是 程序设计 中的一种 设计模式 . 所谓的代理者是指一个类别可以作为其它东西的接口. 代理者可以作任何东西的接 ...
- 【ABviewer从零开始教学编辑器篇③】关于与附加模式相关的主题
ABViewer是一款高质量.高效率.低成本的多功能设计及工程文档管理工具,能为您提供全面的专业的浏览及编辑功能,同时支持30多种光栅和矢量图形格式. 在小编看来,ABViewer是一款非常简单且实用 ...
- 【AngularJS学习笔记】Java Script use strict 严格模式
---恢复内容开始--- 学习Angular的时候,发现好多优秀的源码中,JS文件的最上面,都会写上"use strict"; 这几个字符,搜了一下,找到一篇比较不错的文章,抄过来 ...
- 电气自动化c语言实践操作论文,项目实践论文,关于独立学院电气工程其自动化专业基于CDIO的实践模式相关参考文献资料-免费论文范文...
导读:本文关于项目实践论文范文,可以做为相关论文参考文献,与写作提纲思路参考. (广州大学松田学院 广东广州 511370) 摘 要:独立学院作为培养应用型人才的新生力量,要与地方经济社会发展相衔接, ...
- Android--Pin流程,飞行模式相关流程总结【工作日记一】
Radio 对应相关的Log: <GET_SIM_STATUS APPSTATE_PIN MSimIccCardProxy: ACTION_SIM_STATE_CHANGED rease PIN ...
- 第十三章 相关方管理 权利利益方格 凸显模式 相关方立方体 相关方登记册 相关方参与评估矩阵
相关方管理 过程组 相关方管理 启动 识别相关方 规划 规划相关方参与 执行 管理相关方参与 监控 监督相关方参与 总结:从标题就可以看出,相关方管理就管理相关方参与度.相关方期望.相关方的积极度. ...
最新文章
- 关于R语言plyr包的安装问题
- Android View的事件分发机制解析
- CodeForces - 137D Palindromes(dp+路径输出)
- 4位无符号比较器设计
- VxWorks基本OS介绍
- python对Excel数据进行读写操作
- es使用pencentiles对网站访问延时统计
- 小七揭密delphi源码免杀系列教程
- 27学java能找到工作吗_今年27,想自学Java,转行程序员,请问可行吗?
- 重磅发布:《AI产品经理的实操手册(2021版)——AI产品经理大本营的4年1000篇干货合辑》(PDF)...
- 企业微信打卡统计员工考勤
- 关于fabricjs移动、放大等一些列操作后位置不对的问题
- 小水管也要有尊严 网络限速优化实际案例
- GG32F450XX上移植RT-Thread+LWIP协议栈
- GD32VF103_CAN发送
- 7月14日第壹简报,星期四,农历六月十六
- 入坑 c计划 day 1
- Linux下的文本编辑器和Windows的编辑器
- Java Web 实现 QQ第三方登录
- 检测器:用递归特征金字塔和可切换的阿托洛斯卷积检测物体
热门文章
- 微信服务器在哪里修改密码,微信修改密码在哪里 微信在哪里改密码
- uniapp开发中ios底部出现安全距离问题怎么解决?
- System.IO.FileNotFoundException: Could not load file or assembly ‘xx.dll‘ or one of its dependencies
- okhttp的视频下载
- moviepy音视频开发:音频合成类AudioArrayClip介绍
- 谷歌身份验证器验证码不对怎么回事_暴雪战网游戏手机安全令,身份验证器的使用方法...
- ROS的 sudo rosdep init 的报错终极解决方案
- Istio-智能DNS
- 网站搭建之三(APMServ5.2.6)
- ElasticSearch 狂神说