TypeScript类型检查详谈及火爆原因

 更新时间:2022年05月17日 09:19:29   作者:小生方勤  
这篇文章主要为大家介绍了TypeScript类型检查以及火爆原因,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

TypeScript 这些年越来越火,可以说是前端工程师的必备技能了,各大框架都基于它实现。

那么,TypeScript 的出现和爆火是偶然发生的吗?其实不是,类似 TypeScript 这种静态类型语言成为主流是必然会发生的。为什么这么说呢?

让我们先思考一个问题:类型是什么?

类型具体点来说就是指 number、boolean、string 等基础类型和 Object、Function 等复合类型,它们是编程语言提供的对不同内容的抽象:

不同类型变量占据的内存大小不同:boolean 类型的变量只会分配 1 个字节的内存,而 number 类型的变量则会分配 8 个字节的内存,给变量声明了不同的类型就代表了会占据不同的内存空间。

不同类型变量可做的操作不同:number 类型可以做加减乘除等运算,boolean 就不可以,复合类型中不同类型的对象可用的方法不同,比如 Date 和 RegExp,变量的类型不同代表可以对该变量做的操作就不同。

我们知道了什么是类型,那自然可以想到类型和所做的操作要匹配才行,这就是为什么要做类型检查。

如果能保证对某种类型只做该类型允许的操作,这就叫做类型安全**。比如你对 boolean 做加减乘除,这就是类型不安全,你对 Date 对象调用 exec 方法,这就是类型不安全。反之,就是类型安全。

所以,类型检查是为了保证类型安全的。

类型检查可以在运行时做,也可以运行之前的编译期做。这是两种不同的类型,前者叫做动态类型检查,后者叫做静态类型检查。两种类型检查各有优缺点。

动态类型检查

在源码中不保留类型信息,对某个变量赋什么值、做什么操作都是允许的,写代码很灵活。但这也埋下了类型不安全的隐患,比如对 string 做了乘除,对 Date 对象调用了 exec 方法,这些都是运行时才能检查出来的错误。

其中,最常见的错误应该是

“null is not an object”、“undefined is not a function”

之类的了,写代码时没发现类型不匹配,到了运行的时候才发现,就会有很多这种报错。

所以,动态类型虽然代码写起来简单,但代码中很容易藏着一些类型不匹配的隐患。

静态类型检查

则是在源码中保留类型信息,声明变量要指定类型,对变量做的操作要和类型匹配,会有专门的编译器在编译期间做检查。

静态类型给写代码增加了一些难度,因为你除了要考虑代码要表达的逻辑之外,还要考虑类型逻辑:变量是什么类型的、是不是匹配、要不要做类型转换等。

不过,静态类型也消除了类型不安全的隐患,因为在编译期间就做了类型检查,就不会出现对 string 做了乘除,调用了 Date 的 exec 方法这类问题。

所以,静态类型虽然代码写起来要考虑的问题多一些,会复杂一些,但是却消除了代码中潜藏类型不安全问题的可能。

知道了动态类型检查和静态类型检查的区别,我们自然可以得出这样的结论:

动态类型只适合简单的场景,对于大项目却不太合适,因为代码中可能藏着的隐患太多了,万一线上报一个类型不匹配的错误,那可能就是大问题。

而静态类型虽然会增加写代码的成本,但是却能更好的保证代码的健壮性,减少 Bug 率。

所以,大型项目注定会用静态类型语言开发。

JavaScript 本来是为了浏览器的表单验证而设计的,所以就设计成了动态类型的,写代码比较简单。

但 JavaScript 也没想到它后来会被用来开发各种项目,比如 PC 和移动端的网页、React Native 跨端 App、小程序、Electron 桌面端、Node.js 服务端、Node.js 工具链等。

开发各种大型项目的时候,JavaScript 的动态类型语言的缺点就暴露出来了,bug 率太高了,健壮性很难保证。那自然就有了对静态类型的强烈需求,于是 TypeScript 应运而生。

TypeScript 给 JavaScript 添加了一套静态类型系统,从动态类型语言变成了静态类型语言,可以在编译期间做类型检查,提前发现一些类型安全问题。

而且,因为代码中添加了静态类型,也就可以配合编辑器来实现更好的提示、重构等,这是额外的好处。

所以,TypeScript 的火爆是一个偶然么?不,我觉得是必然,因为大型项目注定会用静态类型语言来开发。

总结

类型决定了变量的内存大小和可以对它进行的操作,保证对什么类型只做什么操作就叫做类型安全,而保证类型安全的方式就是类型检查。

类型检查可以在运行时做,叫做动态类型检查,也可以在编译时做,叫做静态类型检查。

动态类型可能藏在代码里的隐患太多了,bug 率比较高,所以大型项目注定会用静态类型语言来开发。

JavaScript 本身是一门动态类型语言,因为被越来越多的用来开发各种大型项目,所以就有了对静态类型的需求。TypeScript 就满足了这个需求。而且还有额外的更好的提示、更易于重构的好处。

所以,TypeScript 的出现和现在的火爆是必然会发生的。

以上就是TypeScript类型检查详谈及火爆原因的详细内容,更多关于TypeScript类型检查的资料请关注脚本之家其它相关文章!

相关文章

  • chrome扩展学习 右键菜单实现代码

    chrome扩展学习 右键菜单实现代码

    chrome扩展学习 右键菜单实现代码,需要的朋友可以参考下
    2012-11-11
  • 使用roolup构建你的lib(实现步骤)

    使用roolup构建你的lib(实现步骤)

    大家都知道Rollup更加适合用于构建lib 而 Webpack, Precel 更加适合开发应用。本文,将结合一个简单的例子说说如何使用Rollup构建自己的lib,感兴趣的朋友一起看看吧
    2021-08-08
  • vscode调试launch.json常用格式完整的案例

    vscode调试launch.json常用格式完整的案例

    VSCode的launch.json文件是用来配置调试器的,可以设置调试器的启动方式、调试的目标文件、调试的参数,等这篇文章主要给大家介绍了关于vscode调试launch.json常用格式的相关资料,需要的朋友可以参考下
    2024-06-06
  • 前端静态资源福利:百度静态JS资源公共库(CDN)

    前端静态资源福利:百度静态JS资源公共库(CDN)

    如果你在使用jQuery、Bootstrap、backbone、dojo、zepto等各种流行库,一定不要错过百度静态资源公共库。遍布全国各地100+个CDN节点提供加速服务。
    2023-03-03
  • chatgpt 1020 错误码成功解决的三种方案(推荐)

    chatgpt 1020 错误码成功解决的三种方案(推荐)

    造成1020错误的主要原因是代理问题,当打开代理时,登录该网站会直接显示上述错误“Access denied Error code 1020”,怎么解决这个问题呢,下面小编给大家带来了chatgpt 1020 错误码成功解决的三种方案,感兴趣的朋友一起看看吧
    2023-02-02
  • 基数排序算法的原理与实现详解(Java/Go/Python/JS/C)

    基数排序算法的原理与实现详解(Java/Go/Python/JS/C)

    基数排序(RadixSort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。本文将利用Java/Go/Python/JS/C不同语言实现基数排序算法,感兴趣的可以了解一下
    2023-03-03
  • 使用Git Bash向GitHub上传本地项目

    使用Git Bash向GitHub上传本地项目

    这篇文章介绍了使用Git Bash向GitHub上传本地项目的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • 几道和「黑洞照片」那种海量数据有关的算法问题

    几道和「黑洞照片」那种海量数据有关的算法问题

    昨晚被一则新闻刷屏:北京时间 4 月 10 日今晚 9 点,人类首张黑洞照片正式发布
    2019-04-04
  • APAP ALV进阶写法及优化详解

    APAP ALV进阶写法及优化详解

    这篇文章主要为大家介绍了APAP ALV进阶写法及优化详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Typora自动编号的具体操作

    Typora自动编号的具体操作

    相比较world这种文档编辑器而言,Typora更适合写一些程序相关的博客,因为可以用代码+快捷键的方式,方便的对文章内容进行处理,不用在担心排版和样式变形的问题了,在编辑的过程中,就能预览到效果
    2021-12-12

最新评论