TJ VanToll是NativeScript母公司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落后于Babel和Traceur,后两个项目的目标就是尽可能多地支持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主流框架。