什么是 TypeScript

时间回到 2004 年,距离 HTML 上一次版本(4.01)更新已有四年之久。就在这一年,几大知名浏览器厂商(Apple、Mozilla、Opera 和 Google)集结在了一起,其初衷是想要发展下一代 HTML 技术,从而使浏览器拥有更优的用户体验。与此同时,新一轮的浏览器大战也悄然拉开了序幕。想要拥有更好的用户体验,那么提供完善的功能与出色的性能这两点缺一不可。浏览器厂商们纷纷开始支持 HTML 5 中定义的新特性,并且在 JavaScript 引擎优化方面展开了一场 “军备竞赛”。从那之后,JavaScript 程序的运行速度有了数十倍的提升,这为使用 JavaScript 语言开发大型应用程序提供了强有力的支撑。如今,JavaScript 不仅能够用在网页端程序的开发,还被用在了服务器端应用的开发上。但有一个不争的事实—JavaScript 语言不是为编写大型应用程序而设计的。例如,JavaScript 语言在相当长的时间里都缺少对模块的支持。此外,在编写 JavaScript 代码的过程中也缺少开发者工具的支持。因此,编写并维护大型 JavaScript 程序是困难的。

微软公司有一部分产品是使用 JavaScript 语言进行开发和维护的,例如必应地图和 Office 365 应用等,因此微软也面临同样的问题。在微软技术院士 Steve Lucco 先生的带领下,微软公司组建了一个数十人的团队开始着手设计和实现一种 JavaScript 开发工具,用以解决产品开发和维护中遇到的问题。随后,另一位重要成员也加入了这个团队,他就是 C#Turbo Pascal 编程语言之父、微软技术院士 Anders Hejlsberg 先生。该团队决定推出一款新的编程语言来解决 JavaScript 程序开发与维护过程中所面临的难题。凭借微软公司在编程语言设计与开发方面的丰富经验,在历经了约两年的开发后,这款编程语言终于揭开了它神秘的面纱……

2012 年 10 月 1 日,微软公司对外发布了这款编程语言的第一个公开预览版 v0.8。该编程语言就是本书的主角—TypeScript。2014 年 4 月 2 日,TypeScript 1.0 版本发布;2016 年 9 月 22 日,TypeScript 2.0 版本发布;2018 年 7 月 30 日,TypeScript 3.0 版本发布。

根据 StackOverflow 网站举办的开发者调查可以得知,TypeScript 自 2017 年开始便稳居开发者最喜爱的编程语言前列。

始于 JavaScript,终于 JavaScript

TypeScript 是一门专为开发大规模 JavaScript 应用程序而设计的编程语言,是 JavaScript 的超集,包含了 JavaScript 现有的全部功能,并且使用了与 JavaScript 相同的语法和语义。因此,JavaScript 程序本身已经是合法的 TypeScript 程序了。

开发者不但能够快速地将现有的 JavaScript 程序迁移到 TypeScript,而且能够继续使用依赖的 JavaScript 代码库,比如 jQuery 等。因此,就算现有工程中依赖的第三方代码库没有迁移到 TypeScript,它也不会阻碍程序开发。反之,TypeScript 能够让我们更好地利用现有的 JavaScript 代码库。

TypeScript 代码不能直接运行,它需要先被编译成 JavaScript 代码然后才能运行。TypeScript 编译器(tsc)将负责把 TypeScript 代码编译为 JavaScript 代码。

例如,一个 TypeScript 文件的内容如下:

function sum(x: number, y: number): number {
    return x + y;
}

const total = sum(1, 2);

经过编译后输出的 JavaScript 文件的内容如下:

"use strict";
function sum(x, y) {
    return x + y;
}
const total = sum(1, 2);

目前,我们不需要理解这段程序所实现的具体功能。仅通过对比编译之前和之后的代码,我们能够看到编译器生成的 JavaScript 代码既清晰又简洁,并且两者之间在代码结构上几乎没有明显变化。在阅读由编译器生成的 JavaScript 代码时,并不会让开发者强烈地感觉到代码是由机器生成的。相反,它符合开发者平时的代码编写习惯。

读到这里,你可能会产生一个疑问,是不是因为示例程序太简单了,所以生成的代码才会如此清晰简洁?答案是否定的。实际上这种行为是 TypeScript 语言的基本设计原则之一:TypeScript 应该生成简洁、符合编写习惯并易于识别的 JavaScript 代码;TypeScript 不应该对代码进行激进的性能优化。

可选的静态类型

正如 TypeScript 其名,类型系统是它的核心特性。TypeScriptJavaScript 添加了静态类型的支持。我们可以使用类型注解为程序添加静态类型信息。

同时,TypeScript 中的静态类型是可选的,它不强制要求为程序中的每一部分都添加类型注解。TypeScript 支持类型推断的功能,编译器能够自动推断出大部分表达式的类型信息,开发者只需要在程序中添加少量的类型注解便能拥有完整的类型信息。

开放与跨平台

TypeScript 语言是开放的。TypeScript 语言规范使用了 Open Web Foundation’s Final Specification Agreement(OWF 1.0)协议。开放 Web 基金会(Open Web Foundation,OWF)是一个致力于开发和保护新兴网络技术规范的非营利组织。该基金会遵循类似 Apache 软件基金会的开源模式。微软公司实现的 TypeScript 编译器也是开源的,它的源代码托管在 GitHub 平台上并且使用了较为宽松的开源许可协议 Apache License 2.0,该协议允许使用者对源代码进行修改发行以及用于商业用途。

TypeScript 语言是跨平台的。TypeScript 程序经过编译后可以在任意的浏览器、JavaScript 宿主环境和操作系统上运行。