BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

TypeScript的崛起

| 作者 谢丽 关注 11 他的粉丝 发布于 2015年4月14日. 估计阅读时间: 7 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

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)关注我们,并与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

动态类型 coffscript更好 by withyou gakaki

这就叫崛起了?语法比coffescript渣多了。。js最终一定不会以静态类型获胜
如果那样js就不如如此流行了

静态类型 TypScript更好 by YU JIANRONG

为什么一定要有什么获胜呢?TypeScript不是为了取代JS而创造的语言,而是为了在JS并不适合的场景——也就是大规模工程开发中使用的。就像为了做点简单的文件操作任务人们创造了bash,bash可不是为了取代同样能做这些任务的C语言,而是做在这种事情的时候更合适一些,你说bash对C最终会获胜吗?

JS的流行是因为这是互联网时代前端开发的事实唯一语言,动态什么的关系也不大。

所以可以想见的未来是在一些开发人员众多的大型项目中TS会大显身手,而简单网页/app中JS仍为主流。CoffeeScript?一个简单转译到JS的中间语言才是最尴尬的吧……

Re: 静态类型 TypScript更好 by 王 沛

赞TypeScript~~

Re: 静态类型 TypScript更好 by zf m

说得好...开发人员多了js真不好维护

Re: 动态类型 coffscript更好 by Shadow Golden

js流行显然不是因为它语法好,typescript比coffee的优势也肯定不是语法上的优势。毕竟大部分程序员不是搞艺术的……

Re: 动态类型 coffscript更好 by Wen Bosee

大型项目多人开发,静态类型语言有其独特优势。个人观点,js流行因为简单灵活,更因为微软ie曾经独霸多年未更新js,使前端开发别无选择

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

6 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT