Typescript之父
Typescript
的作者Anders Hejlsberg(安德斯·海尔斯伯格)1960年出生,可谓鼎鼎大名,据说当年比尔盖茨亲自参与挖人,高薪聘请,后来事实证明,这位大神非常值得年薪三百万美金的高薪。Anders享有Delphi、C#和TypeScript之父,.NET(dotnet)创立者等诸多头衔,可见其功力深厚。
通过typescrip的github仓库,我们依然能够看到Anders提交的代码,这位大神确实让人敬仰。截图如下:
弱类型语言的弊端
言归正传,我们知道 javascript
语言属于弱类型语言,它对于类型要求并不高,甚至可以通过赋值操作修改变量的类型,例如:
var x = 3.14;
typeof x; //number
x = "Hello World";
typeof x; //string
x变量一开始是 Number
类型,第二行经过赋值,变为 String
类型,这个在 javascript
可谓司空见惯,但是在其他强类型语言中简直无法想象。可能你在想这种场景这么简单,我写代码的时候注意一下就可以了,他能有什么危害,有这种想法的人,一般都是在计算机数据存储方面认识浅薄的菜鸟。小伙子,目光不要这么短浅,你做个小商城,小系统,犯不着使用 Typescript
,Typescript
适合的应用场景是大型应用系统。
假设某一个项目小组,开发某大型应用系统,前端成员大约50人,每人负责一个模块系统。黄小米同学自己封装了一个侧边栏即时通讯的 Chat
模块,你负责的那个模块恰好需要使用她的 openChat
函数方法,调用聊天弹窗。假如,openChat
函数定义代码如下:
function openChat (option) {
//此处省略100行代码
}
当你看到此函数的时候,你估计在想,option
是什么数据类型,我应该怎么传参?option
如果是个 Object
类型,这里面有哪些键值对,他们的数据类型又是如何?
可能某些同学会说,笨啊,直接问黄小米不就好了?当你直接问她的时候,她正在为双十一买哪只口红而纠结,非常不爽的甩你一句"自己看源码",那你吭哧吭哧看了30分钟源码,大约猜出来了option的类型和键值对,这算不算一种低效的沟通?再悲剧一点,黄小米已经离职半年了,你不可能联系到她,请问这个 Chat
模块又该如何维护下去?
我们常说一句话,祖传代码俨然是一座屎山,每次修改维护都要颤颤巍巍,如果你不小心戳中了某一个节点,屎山轰然倒塌,你不仅沾了一身米田共,还要重新码好这座山。祖传代码往往就是因为上面那种场景下,日积月累形成的。javascript
这种弱类型语言尤其容易出现。
Typescript解决了什么问题
Typescript
在原有 javascript
的基础上,扩展了很多优秀的特性,比如静态类型系统、ES6语法、泛型、接口等等,大大增强了代码的可读性以及可维护性;同时,它提供最新和不断发展的 JavaScript 特性,能让我们建立更健壮的组件。挺官方的解释是不是?直白一点,Typescript强制要求程序员去声明数据类型,你如果不按照它的规则去写,它就报错给你看,在你的头上戴了一个紧箍咒。这对大型应用系统确实是好事,如果你辞职了,下一位接班的程序员,依然能够维护你的代码,这对公司来说是非常重要的。
总结起来,Typescript
具有以下优势:
TypeScript 增加了代码的可读性和可维护性
- 类型系统实际上是最好的文档,大部分的函数看看类型的定义就可以知道如何使用了
- 可以在编译阶段就发现大部分错误,这总比在运行时候出错好
- 增强了编辑器和 IDE 的功能,包括代码补全、接口提示、跳转到定义、重构等
TypeScript 非常包容
-
TypeScript
是JavaScript
的超集,.js
文件可以直接重命名为.ts
即可 - 即使不显式的定义类型,也能够自动做出类型推论
- 可以定义从简单到复杂的几乎一切类型
- 即使
TypeScript
编译报错,也可以生成JavaScript
文件 - 兼容第三方库,即使第三方库不是用
TypeScript
写的,也可以编写单独的类型文件供TypeScript
读取
TypeScript 拥有活跃的社区
- 大部分第三方库都有提供给
TypeScript
的类型定义文件 - Google 开发的
Angular
就是使用TypeScript
编写的,Vue 3.0已经使用Typescript
重构,React
支持Typescript
构建项目。 -
TypeScript
拥抱了ES6
规范,也支持部分ESNext
草案的规范
当然,如果学习过 C#
或者 Java
的同学,就会发现这里面的很多语法其实都是强类型语言玩剩下的,换句话说,Typescript
的很多特性都是经过时间考验的,O(∩_∩)O~
参考资料:什么是Typescript
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。