3.3 TypeScript

得益于Electron,我们可以使用HTML、CSS和JavaScript这样的前端技术栈来开发Visual Studio Code。而Visual Studio Code选择了TypeScript而不是JavaScript来进行开发。这是为什么呢?

先来对TypeScript进行一下初步的介绍。TypeScript是一种由微软开发的开源编程语言,于2012年10月1日正式发布。它是JavaScript的严格超集。TypeScript的设计目标就是开发大型应用,解决开发者在使用JavaScript进行开发的过程中的痛点。在开发时,开发者使用TypeScript进行开发,然后通过TypeScript编译器把TypeScript编译成JavaScript代码。TypeScript在JavaScript的基础上添加了许多功能,这些功能包括:

○ 类型批注

○ 类型推断

○ 类型擦除

○ 接口

○ 枚举

○ Mixin

○ 泛型编程

○ 名字空间

○ 元组

正是由于这些功能,TypeScript给开发者带来了诸多便利:

○ 在编辑器/IDE中编写TypeScript时,由于TypeScript带来了类型的支持,因此开发者可以轻松地在开发工具中获取智能提示。

○ 在代码编写时,可以通过TSLint或ESLint这样的工具进行实时静态检查。

○ 在代码编译时,可以通过TypeScript编译器进行类型检查。

○ 在持续集成或持续部署时,也可以轻松进行代码检查,提前发现会在运行时出现的错误。

除此之外,TypeScript还引入了声明文件(扩展名为.d.ts)。声明文件的概念类似于C/C++中的头文件,它可以被用于描述一个JavaScript库或模块导出的虚拟的TypeScript类型。当开发者在使用第三方JavaScript库时,如果有声明文件的支持,那么开发者就可以方便地获取第三方库的类型信息。

相信读者不难看出,TypeScript的一个重要优势就是带来了类型支持。这在多人开发的大型项目中尤为重要。试想一下,如果有两个组件是由两个不同的开发人员进行开发的,而且这个项目是用JavaScript进行开发的,那么在做集成时,由于没有类型支持,所以会十分麻烦。如果在未来,被依赖的组件的某些类或函数签名有任何改动,也很难在代码编写或编译时被提前发现。如果这个项目是用TypeScript进行开发的,那么这些痛点就会被轻松地解决。

所以,在Visual Studio Code项目建立之初,开发团队就选择了TypeScript。对于一个长期的、多人开发的大型项目,这绝对是一个明智的选择。

由于Monaco Editor项目建立之初,TypeScript还未正式发布,所以在项目初期,Monaco Editor使用了JavaScript进行开发。记得有一年,Erich Gamma来到微软上海的紫竹园区给我们做演讲,介绍了他带领的Monaco Editor开发团队如何利用TypeScript重构Monaco Editor,大大提升了整体的项目质量。可见TypeScript及重构的力量有多么强大。虽然从JavaScript迁移到TypeScript是需要一定的时间和精力的,而这却是一劳永逸的,对项目的未来可持续发展有着非常积极的作用。

说到TypeScript,笔者必须要提一下一个重要人物——Anders Hejlsberg(安德斯·海尔斯伯格)。在Borland公司,Anders设计了Delphi和Turbo Pascal。1996年,Anders加入微软。加入微软后,Anders首先主持开发Visual J++。不幸的是,由于在Java开发工具授权问题上和Sun公司的纠纷,微软停止了Visual J++的开发。随后,Anders开始主持.NET的设计与开发,并且担任C#语言的首席架构师。2012年,Anders宣布了他设计的新语言TypeScript。从此,TypeScript逐渐在业界流行起来。从Angular 2开始,Angular就开始用TypeScript编写。Vue 3.0也用TypeScript进行了重写。除了微软自己的开发工具(Visual Studio Code和Visual Studio)对TypeScript有着极好的支持,我们也看到越来越多的开发工具开始全面支持TypeScript的开发:Sublime Text、Atom、Eclipse、WebStorm、Vim、Emacs等。