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 (完成)。

001.TypeScript简介.md的更多相关文章

  1. RV ItemDecoration 分割线 简介 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  2. AS 功能 设置 SDK AVD 简介 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  3. Learining TypeScript (一) TypeScript 简介

    Learining TypeScript (一) TypeScript 简介 一.TypeScript出现的背景    2 二.TypeScript的架构    2 1.    设计目标    2 2 ...

  4. 转载:TypeScript 简介与《TypeScript 中文入门教程》

    简介 TypeScript是一种由微软开发的自由和开源的编程语言.它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程.安德斯·海尔斯伯格,C#的首席架构 ...

  5. 1 TypeScript 简介与安装

    简介: TypeScript 是一种由微软开发维护的自由和开源的编程语言,它是JavaScript的一个超集,支持可选的类型检查,扩展了JavaScript的语法,支持JavaScript的所有语法和 ...

  6. typescript简介

    微软作为编译器狂魔一直有一个心病,就是改良JavaScript这种语法超级烂又很多人用的编程语言,于是TypeScript诞生了 先做个对比吧:   TS JS 语法严谨性 严谨 宽松 静态性 静态 ...

  7. 001. Ansible简介

    一 简介 Ansible是一款极其简单的自动化运维工具, 基于Python开发, 集合了众多运维工具(puppet, cfengine, chef, func, fabric)的优点. 实现了批量系统 ...

  8. 001.Ceph简介概述

    一 Ceph简介 Red Hat Ceph是一个分布式的数据对象存储,系统设计旨在性能.可靠性和可扩展性上能够提供优秀的存储服务.分布式对象存储是存储的未来,因为它们适应非结构化数据,并且客户端可以同 ...

  9. 001.Redis简介及安装

    一 Redis简介 1.1 Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key-value 缓存产品有以下三个特点: ...

随机推荐

  1. CCControlExtension/CCControlPotentiometer

    #ifndef __CCCONTROLPOTENTIOMETER_H__ #define __CCCONTROLPOTENTIOMETER_H__ #include "CCControl.h ...

  2. 揭秘Product Hunt怎样运用邮件崛起

    Product Hunt正被硅谷热议,而大家谈论Product Hunt时,经常涉及邮件营销. Product Hunt由Ryan Hoover 在2013年11月创立.鼓舞人们发现和分享新产品的站点 ...

  3. Android应用内加载pdf的方法?

    [可行] 最直接的方式下载到本地, 然后调用相关应用打开 [可行,有局限] 使用 webview 加载, 需要在 原url 前面加上 http://docs.google.com/gview?url= ...

  4. sc.textFile("file:///home/spark/data.txt") Input path does not exist解决方法——submit 加参数 --master local 即可解决

    use this val data = sc.textFile("/home/spark/data.txt") this should work and set master as ...

  5. C++如何调用C#编写的 DLL

    由于C#编绎出来的DLL不是计算机所能直接识别的二进制指令码,需要CLS进行再解释,说到这,我想有些朋友应该知道C#项目需要引用C++编写的DLL时,可以直接引用DLLMPORT来实现调用,而反向的话 ...

  6. C# Lambda && Linq

    Lambda表达式在C#3.0加入,它是一个匿名函数,可用于创建委托或者表达式树类型,运算符为=>,读作"goes to",=>左侧是变量,右侧是表达式,变量类型可以自 ...

  7. bioinformaitcs的latex版本参考文献填坑

    最近实验室投bioinfomatics的刊,编辑说要把参考文献的格式改成不带方括号的,而且加点,而且只保留前三作者,之后用et al. 折腾了一下午,终于弄出来了. 首先,导言区需要添加: \make ...

  8. layui layer 弹框

    layer 这个是一个web弹层组件,挺好用的...然后项目框架是SSM... layer.open主要是用来弹出来一个iframe弹窗,然后用来展示数据也行,用来修改也行,这次记录的主要是展示,展示 ...

  9. Jlink如何校验Hex

    打开SEGGER J-Flash ARM,记住必须设置好工程属性后才能校验,否则校验和为0 设置好工程属性后,直接将Hex拖入到工程中即可.在LOG窗口中会显示CRC的值 如何校验芯片中的程序的版本号 ...

  10. json对象获取长度以及字符串和json对象的转换

    var arr = Object.keys(typeARR); var str = ''; var len = arr.length; for(var i = 0;i<len;i++){ str ...