TypeScript 的崛起

  • 谢丽

2015 年 4 月 13 日

话题:JavaScript语言 & 开发架构前端

TJ VanTollNativeScript母公司Telerik的一名开发人员,同时也是jQuery 团队的一名成员及《jQuery UI in Action》一书的作者。近日,他在 Telerik 开发者博客上发布了一篇文章,分析 TypeScript 崛起的原因。

他在文章开头指出,Angular 团队之所以决定Angular 2 从 AtScript 迁移到 TypeScript是因为 JavaScript 社区的工具和框架更新缓慢。Angular 并不是唯一使用 TypeScript 的项目。就在 Angular 宣布迁移到 TypeScript 当天,Telerik 发布了 NativeScript 公开测试版,它的核心 JavaScript 框架CLI均是用 TypeScript 编写的。TypeScript 因此获益匪浅,下图是过去几个月中的谷歌搜索趋势:

可以看出,与同它有竞争关系的 compile-to-JavaScript 框架 CoffeeScript 和 Dart 相比,其搜索热度明显上升。

JavaScript 应用如此广泛,许多具有不同编程背景的开发人员都创建了更适合其应用场景的 JavaScript,TypeScript 并不是第一个做这种尝试的。CoffeeScript 团队维护了一个列表,上面竟然有 250 多种可以编译成 JavaScript 的语言。VanToll 认为,与它们相比,TypeScript 主要有以下几点不同。

第一,TypeScript 具有可选性。Compile-to-JavaScript 框架通常可以分为两类:一类基于 JavaScript;另一类完全抛弃 JavaScript。TypeScript 属于前者。它是 JavaScript 的一个超集,也就是说,开发人员可以将现有的.js 文件重命名为.ts 文件。这与 CSS 处理器 SASS 或 LESS 类似。

TypeScript 包含一个可选的类型系统,即允许开发人员根据需要决定是否使用类型。例如,下面的 TypeScript 代码定义了两个数值型变量,然后用它们计算面积:

var height : number = 2;
var width : number = 3;
console.log( "Area is: " + ( height * width ) );

在这种情况下,没有必要使用类型,因为变量的用途很明显,而且 TypeScript 可以从等式右侧推断出类型。但在下面这样的情况下,使用类型就相当有必要:

function calculateArea( height: number, width: number ) : number {
    return height * width;
}

console.log( calculateArea( 2, 3 ) );

上述代码中的三个 number 声明可以告诉 TypeScript 及其他开发人员该函数的参数类型和返回值类型,前者可以据此进行编译时类型检查,后者可以据此知道函数用法。除了类型外,TypeScript 还提供了模块接口,开发人员均可以根据需要决定是否使用它们。

第二,TypeScript 与 ECMAScript 兼容。TypeScript 一直承诺支持最新 ECMAScript 特性,因此,开发人员不必担心使用了一种不合标准的语言。年初发布的TypeScript 1.4已经支持 let 和 const 关键词,并支持 ES6 模板字符串。即将发布的 1.5 版本会支持解构、“展开操作符(spread operator)”等更多 ES6 特性。不过,在支持 ES6 新特性方面,TypeScript 落后于BabelTraceur,后两个项目的目标就是尽可能多地支持 JavaScript 新特性。

第三,TypeScript 有良好的工具支持。以前,只有 Visual Studio 提供 TypeScript 工具。现在,情形大为改观。WebStorm 最近增加了 TypeScript 支持Eclipse 也有了 TypeScript 插件,而且微软正在为 Sublime Text 开发 TypeScript 插件

此外,VanToll 还特别指出,TypeScript 声明文件是他最喜欢的一个特性。DefinitelyTyped 库包含了数以百计现有库的声明文件。它们非常受欢迎,像 Facebook Flow 这样的静态类型检查器也正在考虑使用它们。实现代码补全功能也是其用途之一。

上述任意一点都不足以使 TypeScript 与众不同,比如 Dart 也有一个可选的类型系统,也有一些语言是基于 JavaScript 构建,但三者兼备是 TypeScript 的竞争力所在。

但是,目前还没有任何 compile-to-JavaScript 语言成为主流。在TIOBE 编程语言排行榜上,前 50 名内没有一门 compile-to-JavaScript 语言,CoffeeScript 和 Dart 位列 50 到 100 名之间,而 TypeScript 甚至都没上榜。而且,CoffeeScript 也有许多优点,在 Ruby 社区中也很受欢迎,但它依然不能冲出 Ruby 生态系统成为主流。

即便如此,VanToll 认为,TypeScript 有成为主流的潜力和希望。除了前述特性外,TypeScript 还有一个不同之处在于背后有微软和 Angular 的支持。他们各有一个庞大的开发者社区,如果 TypeScript 能够得到这两个社区的用户的认可,那么它可能会成为第一个 compile-to-JavaScript 主流框架。


感谢徐川对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流。

JavaScript语言 & 开发架构前端