历史
-
1995年5月艾克仅花了十天时间设计出原型,并命名为Mocha
-
1995年9月在Netscape Navigator 2.0的Beta版中改名为LiveScript
-
1995年12月,Netscape Navigator 2.0 Beta 3中部署时被重命名为JavaScript
过去与现在
过去
目的纯粹是为了丰富页面的行为与交互。以往我们在写JavaScript时,通篇都是全局的function,好的设计最多就是挂在一个全局变量中。
现在
用户对页面的体验要求越来越高了,JavaScript对丰富页面起到了无可替代的作用。如今不仅在浏览器上大放光彩,服务端、桌面应用程序的开发也非常流行。
总之
JavaScript的代码量占比越来越多,地位也越来越高。
不足
作为解释型的脚本语言,先天不足,抛开那些明明像是bug一样存在的奇怪运行结果,却被某些人拿来当成一个特点。如果你是一位从上面所说的过去到现在一直都接触JavaScript的人,你会发现,现在的JavaScript项目越来越复杂,或者不是复杂,而是专业,如同Java或C#使用IDE新建的Web项目一样,是一个项目
,也就是说JavaScript的强大使它变得独立了。能称之为项目
,我们更应该认真去对待它、设计它。
步入正题
现在都2019年了,如果你的项目中还没有使用TypeScript,那么,请远离我,不要跟我说话。因为我生活在2019年,而你还生活在2009年。
TypeScript是什么?
官网的定义
某中文网的定义
明显某中文网的最后一行翻译有误,这样的翻译应该会在第一时间误导初学者,初学者可能认为TS就是一个全兼容的比JS更强大的语言。不过,学TS之前,你肯定要先学习JS。
简单一句话:它是JavaScript的超集,在最终运行的环境上需要先编译为JavaScript,之后运行的当然是JS了,和TS就没有半点关系了。
什么是超集?
如果一个集合S2中的每一个元素都在集合S1中,且集合S1中可能包含S2中没有的元素,则集合S1就是S2的一个超集,反过来,S2是S1的子集。
也就是说:TypeScript包含了JavaScript,编写TypeScript代码,相当于也编写了JavaScript代码,并且你还能享受到除JavaScript集合之外的功能。
为什么要先编译为JavaScript?
因为浏览器或其它可以运行js的环境无法识别TypeScript。所以,在最终发布代码之前,要先把它编译成js文件,再发布代码。
注意事项
-
TypeScript只是用来约束开发JavaScript的代码,它是强类型的,有接口、命名空间等。
-
TypeScript集合中除去JavaScript集合外的功能只在开发时起作用,在最终编译成js后是不会起作用的。比如TS中有类型接口等约束,在实际编译后,这种约束修饰会被去掉,因为在js中没有这些东西。
它主要有哪些功能?
-
基础类型
-
接口
-
泛型
-
枚举
-
命名空间
-
...
是不是完全就相当于一门后台语言了?具体的功能点我不在这里细说,这不是本文的重点。
我为什么要用它?
如果你开发过后台语言,比如java,当你把一个字符串赋值给一个整型的变量时,此时编译器会第一时间告诉你,你的代码写错了,需要改正,如果你不改正,你也无法编译通过。而传统的JS的变量就没有这个限制,你完全可以把一个字符串、一个对象随意地赋值给一个变量,或者说,你也可以随意地去扩展一个对象的属性,而开发工具不会给你任何提示。如果你写的代码是有问题的,那么,你只能在真正运行到这个逻辑的时候,你才能发现可能有问题。
如果你在项目中遇到了这些场景,那么,请第一时间考虑使用TypeScript吧:
-
代码很复杂,经常需要维护
-
多人开发时,某些成员总是对一些对象进行额外扩展,导致该对象会增加一些额外的属性,而另一成员又不知道这个对象还有这个属性的存在
-
前后端分离时需要先定义好前端的契约
-
前端项目需要模块化、工程化
总结
TypeScript使我们的开发过程变得更自律,从而更自由,我们不用再担心因为无类型系统的约束而导致的意想不到的问题。我们可以在以后都尽量不写JavaScript,我们是时候抛弃
JavaScript了,而应该拥抱TypeScript。因此,我在所有的项目中,均第一时间选择它,再也不写JavaScript了,从此,整个世界都清静了许多。