strict 作用

TypeScript 中的严格模式跟 JavaScript 中说的严格模式(即 use strict)不是一个概念,它表示是否开启下面一系列的类型检查规则:

"noImplicitAny": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"strictBindCallApply": true,
"strictPropertyInitialization": true,
"noImplicitThis": true,
"alwaysStrict": true
  • 如果你设置 stricttrue 的话,那么上面所有的配置默认全是 true
  • 如果你设置 strictfalse 的话,那么上面的所有配置默认全是 false
  • 你如果既设置了 strict 又单独设置了其中的部分配置,那么以单独设置的配置为准

strictNullChecks

默认情况下,nullundefined 可以被赋值给其它任意类型,因为 nullundefined 是任何类型的子类型。

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 时,nullundefined 就不能赋值给任何类型了,对于它们的校验相当于开启了严格模式

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 类型的,但是调用时,datestring 类型的,
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));
});

如果开启 strictFunctionTypestrue,报错如下

strictBindCallApply 作用

严格绑定检查。意思是在使用 bindcallapply 语法的时候,是否进行参数检查

示例

如下代码,当 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')();

当我们设置 strictBindCallApplytrue 时,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严格模式相关相关推荐

  1. java严格模式_“use strict” 严格模式使用(前端基础系列)

    ECMAscript5添加一种严格模式的运行模式("use strict"),让你的js语句在更加严格的环境下进行运行: 一.主要作用: 消除版本javascript中一些不合理及 ...

  2. “use strict” 严格模式使用(前端基础系列)

    ECMAscript5添加一种严格模式的运行模式("use strict"),让你的js语句在更加严格的环境下进行运行: 一.主要作用: 消除版本javascript中一些不合理及 ...

  3. F2-网络模式相关命令

    F2-网络模式&相关命令 1. 描述什么是桥接网络和nat网络模式,并写出两种网络模式的静态ip配置步骤: 2.练习相关命令,alias.cat.cp.mv.touch.mkdir.less. ...

  4. 代理模式相关简单论述

    代理模式相关简单论述 1.代理模式的简述 代理模式 (英语:Proxy Pattern)是 程序设计 中的一种 设计模式 . 所谓的代理者是指一个类别可以作为其它东西的接口. 代理者可以作任何东西的接 ...

  5. 【ABviewer从零开始教学编辑器篇③】关于与附加模式相关的主题

    ABViewer是一款高质量.高效率.低成本的多功能设计及工程文档管理工具,能为您提供全面的专业的浏览及编辑功能,同时支持30多种光栅和矢量图形格式. 在小编看来,ABViewer是一款非常简单且实用 ...

  6. 【AngularJS学习笔记】Java Script use strict 严格模式

    ---恢复内容开始--- 学习Angular的时候,发现好多优秀的源码中,JS文件的最上面,都会写上"use strict"; 这几个字符,搜了一下,找到一篇比较不错的文章,抄过来 ...

  7. 电气自动化c语言实践操作论文,项目实践论文,关于独立学院电气工程其自动化专业基于CDIO的实践模式相关参考文献资料-免费论文范文...

    导读:本文关于项目实践论文范文,可以做为相关论文参考文献,与写作提纲思路参考. (广州大学松田学院 广东广州 511370) 摘 要:独立学院作为培养应用型人才的新生力量,要与地方经济社会发展相衔接, ...

  8. Android--Pin流程,飞行模式相关流程总结【工作日记一】

    Radio 对应相关的Log: <GET_SIM_STATUS APPSTATE_PIN MSimIccCardProxy: ACTION_SIM_STATE_CHANGED rease PIN ...

  9. 第十三章 相关方管理 权利利益方格 凸显模式 相关方立方体 相关方登记册 相关方参与评估矩阵

    相关方管理 过程组 相关方管理 启动 识别相关方 规划 规划相关方参与 执行 管理相关方参与 监控 监督相关方参与 总结:从标题就可以看出,相关方管理就管理相关方参与度.相关方期望.相关方的积极度. ...

最新文章

  1. 关于R语言plyr包的安装问题
  2. Android View的事件分发机制解析
  3. CodeForces - 137D Palindromes(dp+路径输出)
  4. 4位无符号比较器设计
  5. VxWorks基本OS介绍
  6. python对Excel数据进行读写操作
  7. es使用pencentiles对网站访问延时统计
  8. 小七揭密delphi源码免杀系列教程
  9. 27学java能找到工作吗_今年27,想自学Java,转行程序员,请问可行吗?
  10. 重磅发布:《AI产品经理的实操手册(2021版)——AI产品经理大本营的4年1000篇干货合辑》(PDF)...
  11. 企业微信打卡统计员工考勤
  12. 关于fabricjs移动、放大等一些列操作后位置不对的问题
  13. 小水管也要有尊严 网络限速优化实际案例
  14. GG32F450XX上移植RT-Thread+LWIP协议栈
  15. GD32VF103_CAN发送
  16. 7月14日第壹简报,星期四,农历六月十六
  17. 入坑 c计划 day 1
  18. Linux下的文本编辑器和Windows的编辑器
  19. Java Web 实现 QQ第三方登录
  20. 检测器:用递归特征金字塔和可切换的阿托洛斯卷积检测物体

热门文章

  1. 微信服务器在哪里修改密码,微信修改密码在哪里 微信在哪里改密码
  2. uniapp开发中ios底部出现安全距离问题怎么解决?
  3. System.IO.FileNotFoundException: Could not load file or assembly ‘xx.dll‘ or one of its dependencies
  4. okhttp的视频下载
  5. moviepy音视频开发:音频合成类AudioArrayClip介绍
  6. 谷歌身份验证器验证码不对怎么回事_暴雪战网游戏手机安全令,身份验证器的使用方法...
  7. ROS的 sudo rosdep init 的报错终极解决方案
  8. Istio-智能DNS
  9. 网站搭建之三(APMServ5.2.6)
  10. ElasticSearch 狂神说