Typescript之父

Typescript 的作者Anders Hejlsberg(安德斯·海尔斯伯格)1960年出生,可谓鼎鼎大名,据说当年比尔盖茨亲自参与挖人,高薪聘请,后来事实证明,这位大神非常值得年薪三百万美金的高薪。Anders享有Delphi、C#TypeScript之父,.NET(dotnet)创立者等诸多头衔,可见其功力深厚。

通过typescrip的github仓库,我们依然能够看到Anders提交的代码,这位大神确实让人敬仰。截图如下:
image.pngimage.png

弱类型语言的弊端

言归正传,我们知道 javascript 语言属于弱类型语言,它对于类型要求并不高,甚至可以通过赋值操作修改变量的类型,例如:

var x = 3.14;
typeof x; //number
x = "Hello World";
typeof x; //string

x变量一开始是 Number 类型,第二行经过赋值,变为 String 类型,这个在 javascript 可谓司空见惯,但是在其他强类型语言中简直无法想象。可能你在想这种场景这么简单,我写代码的时候注意一下就可以了,他能有什么危害,有这种想法的人,一般都是在计算机数据存储方面认识浅薄的菜鸟。小伙子,目光不要这么短浅,你做个小商城,小系统,犯不着使用 TypescriptTypescript适合的应用场景是大型应用系统

假设某一个项目小组,开发某大型应用系统,前端成员大约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 非常包容
  • TypeScriptJavaScript 的超集,.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

Coder
42 声望16 粉丝