typescript是什么?
typescript是为javascript而生的静态类型语言,但是typescript是JavaScript的超集,拥有许多javascript不具有的新特性(例如类,接口等)。
typescript与JavaScript的关系?
ts包含es6。
在typescript里面可以使用一些还未正式上线的语法特性,但是ts与js最主要的区别还是ts是一门静态语言。
在typescript推出时,收到一些质疑:
typescript的静态语言会丧失JavaScript的灵活性;
typescript不是银弹(银弹(Silver Bullet)指的是彻底消除软件危机,带来软件研发的变革的神奇武器),大型项目依旧用JavaScript写最好;
typescript会像coffeescript 一样被标准所取代;
而这些质疑中,ts是静态语言这一点,让第三条质疑的可能性为零,因为coffeescript 本质上来说只是js的语法糖而已,而ESCM2015参照coffeescript 进行了标准化,所以coffeescript 被取代是理所当然的。
为什么要学习typescript?
静态类型
首先,什么事静态类型呢?简单来说,一种语言,在编译时报错就是静态类型语言,在运行时报错就是动态类型语言。另外ts按我自己的理解,其实是一种静态弱类型语言,因为ts对隐式转换是有容忍度的,any类型并没有什么关系,但是如果是强类型语言的话,是不会容忍任何隐式转换的(例如Java,c#)。
在使用js编写程序时,在运行时一些低级错误会占用大量的debug和查找哪里出错的时间,降低开发效率,需要更多的时间成本去完成一些原本可以规避的错误,而ts作为一门静态类型语言,在编写,编译时就可以直接看到报错,已经ts与js相比更加完善的提示信息,可以让我们大大减少例如传值错误之类的一些低级错误,提高代码质量,加快代码编写速度。
严谨且灵活
可能很多人认为,ts作为一门静态语言会丧失js的灵活性,但是ts兼容了js,所以并不存在丧失灵活性一说。且我们使用ts检测的严格程度,可以使用tsconfig.json来配置,若你配置不够严格,ts就可以变为anyType,保存所有js的灵活度。
而ts使用的是Structural Type System(结构化类型,也可称为鸭子类型),所谓鸭子类型: :::info 一只鸟,走起路来像鸭子,游泳也像鸭子,叫起来也像鸭子,那么这只鸟,就可以称之为鸭子。 :::
通过对鸭子类型的解读,我们可以得出,ts其实不是类型定义的本身,而是可以当做为类型定义的形状,例:
class funcA(){way(value:string){ }}class funcB(){way(value:string){ }}const A:funcA = new funcA();const B:funcB = new funcA();
以上例子不会报错,因为她们的形状是一样的,而对于强类型的语言,是不容许这样定义的。
typescript的缺点
作为typescript难道没有缺点吗?答案是有的,相较于javascript,typescript需要付出更多的学习成本,一是官方文档不够详细,如果自己单看的话,很难看懂官方文档中的各种类型定义究竟是要干嘛,另外typescript的工程配置也是和javascript不同的,所以都需要付出更多的学习时间以及成本。
