001.TypeScript简介.md

TypeScript是一门开源的,由微软开发维护的,发布于2012年10月的静态类型的语言;
他是ECMAScript的超集,支持JavaScript的所有语法和语义,并且在此基础之上提供了更多额外的特性,例如静态类型和更丰富的语法。

1. TypeScript的优点

1.1. 编译时类型检查

所有的动态语言,包括JavaScript,其在编写过程中一些拼写错误,直到运行时才能发觉,即使我们编写大量单元测试于事无补。TypeScrip在这方面做了增强,其采用了静态代码分析技术,有自己的编译器,从而可以帮助我们发现这些错误,如果采用静态类型,TypeScript会帮助我们注意对象中的各种属性,如果发生了拼写错误,编译器会产生编译时错误来发出警告。
使用TypeScript的另一个巨大优点是:它提供了正式的、可验证的命名规则,从而可以方便大型团队之间的协作。我们恶意通过这种方式编写出易于理解的代码。

1.2. 文本编辑器和IDE的支持更好

相对于JavaScript这种动态语言来讲,TypeScript内置了使用元数据来给代码添加注解的特性,叫做类型注解,文本编辑器和IDE可以根据这些注解对我们的代码进行更好的静态分析,基于这一特性,可以提供更好的代码重构工具和自动完成功能,从而让我们在编写代码的时候效率更高、错误更少。

1.3. 他是JavaScript的超集

JavaScript(ES5、ES2015、ES2016)的所有特性TypeScript都支持,由于它基于最新版本的ECMAScript标准,所以我们可以利用这门语言所提供的最前沿的语法。

1.4. 支持可选的类型检查

如果由于某种原因我们不想显示定义变量和方法的类型,可以跳过类型定义。但是,请注意,这样就无法利用静态类型特性,也就无法利用前面说的那些优点了。

1.5. 由Miscrosoft开发并维护

这门语言本身的代码实现质量非常高,并且不会毫无预兆地放弃支持。TypeScript构建在世界上最好的编程语言专家所提供的作品之上。
不仅如此包括Dojo2、Angular2等都采用TypeScirpt作为其强烈推荐的第一语言。

1.6. 他是开源的

我们可以公开自由的通过社区来提出建议特性并贡献代码,而且我们可以更容易的开发第三方扩展和工具,从而更好的扩展这门语言的使用范围。

1.7. 提供更好的兼容性

我们可以将编写好的TypeScript编译成可读的JavaScript代码,编译时,可以指定目标ECMAScript版本,一旦编译完成,所有类型注解都会被删除。
ES5的浏览器支持:
一般来说,除了针对个别特性的特殊说明,各大主流浏览器都支持es5,包括

  • Chrome 13+
  • Firefox 4+
  • Safari 5.1*
    Safari 5.1不支持 Function.prototype.bind。
  • IE 9*
    其中IE9不支持es的严格模式,从IE10开始支持。

下面将介绍的tsc,默认将ts编译为ES3标准的脚本(IE8支持),不过如果使用某些特殊语法,比如getset存取器时,因为需要使用到Object.defineProperty(),就只支持编译为ES5了,否则会报错如下:

sample-classes.ts(4,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.

2. 基于npm安装TypeScript

需要npm3.0.0以上版本,通过如下命令检查:

npm -v
3.10.10

安装TypeScript

npm intall -g typescript

安装完成后,可以通过如下命令确定TypeScript的版本:

tsc -v
Version 2.2.2

3. 运行第一个TypeScript程序

hello-world.ts

console.log('Hello World!');

3.1. 编译ts为js

使用如下命令将ts文件编译为js

tsc hello-world.ts

在ts文件同目录下回生成一个编译好的js文件hello-world.js

3.2. 通过nodejs进行测试运行

node hello-world.js
Hello World!

3.3. 使用ts-node模块组合编译运行

如果想组合编译和运行的命令,可以使用ts-node进行,安装和使用如下:
安装:

npm install -g ts-node

编译运行

ts-node hello-world.ts

3.4. 编译为特定的版本

上面也提到了tsc默认编译为ES3标准的脚本,如果想编译为更高版本,则需要特殊指定:

tsc sample-classes.ts --target ES5

附录一. ECMAScript标准演进

附录信息引用自
JavaScript 有着很奇怪的命名史。
1995 年,它作为网景浏览器(Netscape Navigator)的一部分首次发布,网景给这个新语言命名为 LiveScript。一年后,为了搭上当时媒体热炒 Java 的顺风车,临时改名为了 JavaScript(当然,Java 和 JavaScript 的关系,就和雷锋和雷锋塔一样 —— 并没有什么关系)

1996 年,网景将 JavaScript 提交给ECMA International(欧洲计算机制造商协会)进行标准化,并最终确定出新的语言标准,它就是 ECMAScript。自此,ECMAScript成为所有 JavaScript 实现的基础,不过,由于 JavaScript 名字的历史原因和市场原因(很显然 ECMAScript 这个名字并不令人喜欢……),现实中我们只用 ECMAScript 称呼标准,平时都还是使用 JavaScript 来称呼这个语言。

其实在第一版的 ECMAScript 发布后,很快又跟进发布了两个版本,但是自从 1999 年 ECMAScript 3 发布后,十年内都没有任何改动被成功添加到官方规范里。取而代之的,是各大浏览器厂商们争先进行自己的语言拓展,web 开发者们别无选择只能去尝试并且支持这些 API。即使是在 2009 年 ECMAScript 5 发布之后,仍然用了数年这些新规范才得到了浏览器的广泛支持,可是大部分开发者还是写着 ECMAScript 3 风格的代码,并不觉得有必要去了解这些规范。

一直到2012年,
事情突然开始有了转变。大家开始推动停止对旧版本 IE 浏览器的支持,用 ECMAScript 5 (ES5) 风格来编写代码也变得更加可行。与此同时,一个新的 ECMAScript 规范也开始启动。到了这时,大家开始逐渐习惯以对 ECMAScript 规范的版本支持程度来形容各种 JavaScript 实现。在正式被指名为 ECMAScript 第 6 版 (ES6) 之前,这个新的标准原本被称为 ES.Harmony(和谐)。2015 年,负责制定 ECMAScript 规范草案的委员会 TC39 决定将定义新标准的制度改为一年一次,这意味着每个新特性一旦被批准就可以添加,而不像以往一样,规范只有在整个草案完成,所有特性都没问题后才能被定稿。因此,ECMAScript 第 6 版在六月份公布之前,又被重命名为了 ECMAScript 2015(ES2015)

目前,ES2016中有添加了很多新的 JavaScript 特性或语法,包括decorators(装饰者),async-await(async-await 异步编程模型)和static class properties(静态类属性)。它们通常被称为 ES7,ES2016 或者 ES.Next 的特性,TC39 把一个提案分为 4 个阶段,你可以在Babel 的官网上查看各个提案目前都在哪个阶段了。

所以,我们该如何使用这一大堆术语呢?下面的列表或许能帮助到你:

  • ECMAScript:一个由 ECMA International 进行标准化,TC39 委员会进行监督的语言。通常用于指代标准本身。
  • JavaScript:ECMAScript 标准的各种实现的最常用称呼。这个术语并不局限于某个特定版本的 ECMAScript 规范,并且可能被用于任何不同程度的任意版本的 ECMAScript 的实现。
  • ECMAScript 5 (ES5):ECMAScript 的第五版修订,于 2009 年完成标准化。这个规范在所有现代浏览器中都相当完全的实现了。
  • ECMAScript 6 (ES6) / ECMAScript 2015 (ES2015):ECMAScript 的第六版修订,于 2015 年完成标准化。这个标准被部分实现于大部分现代浏览器。可以查阅这张兼容性表来查看不同浏览器和工具的实现情况。
  • ECMAScript 2016:预计的第七版 ECMAScript 修订,2016夏季发布。
  • ECMAScript Proposals:被考虑加入未来版本 ECMAScript 标准的特性与语法提案,他们需要经历五个阶段:Strawman(稻草人),Proposal(提议),Draft(草案),Candidate(候选)以及 Finished (完成)。
posted @ 2017-05-18 09:00  Gavin·Gong  阅读(571)  评论(0编辑  收藏