码迷,mamicode.com
首页 > 其他好文 > 详细

TypeScript系列1-1.5版本新特性

时间:2015-08-15 23:15:27      阅读:432      评论:0      收藏:0      [点我收藏+]

标签:

1. 简介

    随着PC端快速向移动端迁移,移动(体验)优先的概念也越来越响。由于ReactJS目前移动端仅仅支持iOS,因此移动端Web开发框架只能选择: AngularJS/Angula2 + Ionic框架 + Cordova。想要学习好Angula2以及阅读其代码, 就必须了解和学习TypeScript,也因此需要学习好ES6以及Web Component。近期将开始学习TypeScript语言。

    下面先看看TypeScript语言的发展:

    鉴于JavaScript这种脚本语言很难应用于大规模Web应用的开发,微软公司在2012年推出了新的开源编程语言——TypeScript。作为Object Pascal和C#之父Anders Hejisberg的又一作品,TypeScript是JavaScript的超集,但完全兼容JavaScript。相比于JavaScript,TypeScript增加了可选类型、类和模块,扩展了原有的语法,使得代码组织和复用变得更加有序,方便进行大型Web应用的开发。

    微软是在2012.11月份将TypeScript语言开源,0.8.1版本是第二个开源的版本[1]。

    2014年4月,TypeScript 1.0版本正式发布[2]。之后,微软公司不断更新该语言,陆续推出了1.3、1.4版本。

    2015年7月20日TypeScript1.5版本正式发布[3]。 

2. TypeScript 1.5版本新特性

[4]虽然对TypeScript 1.5版本的新特性进行了翻译,但其中一些关键字词上含义偏差较远,而且没有给出举例的代码,下面内容主要是参考[3][4]重新整理的。

首先,在ES6(ECMAScript 6,即ECMAScript 2015)的支持方面。TypeScript 1.5版本增加了对ES6中Modules、Destructuring、Spread、for..of、Symbols、Computed Properties、Let/Const、和Tagged String Templates等新特性的支持。这些新特性使得TypeScript向成为ES6的超集并为ES6的所有主要特性提供类型检查的目标迈进了一大步。

其次,在模块(Module)方面,TypeScript 1.5也进行了很大改动。TypeScript 1.5支持ES6的新模块语法——ES6模块可以用import导入模块并用export导出每一个公共API,甚至可以只导入公共API所需要使用的那部分。

import * as Math from "my/math";
import { add, subtract } from "my/math";


而且,开发人员还可以使用default export声明表示模块的核心内容,从而可以对API做更精确控制。

// math.ts
export function add(x, y) { return x + y }
export function subtract(x, y) { return x – y }
export default function multiply(x, y) { return x * y }

// myFile.ts
import {add, subtract} from "math";
import times from "math";
var result = times(add(2, 3), subtract(5, 3));

在math.ts文件的最后一行用了‘export default‘,这一行可控制这是一个‘default‘ export,当只是用名称而不是用花括号({})来导入具体的exports时就导出这个缺省export,就像myFiles.ts文件的第二行。


此外,TypeScript 1.5对模块进行了简化,并换用更加简洁的名称——内部模块改称为“namespace”,外部模块才为“module”。

由于JavaScript既用于浏览器也用于服务器端,因此TypeScript已经支持将模块编译为AMD或 CommonJS。为了支持更多的JavaScript实践,TypeScript 1.5新增加了两个新的模块输出格式:SystemJS和UMD,其中SystemJS可以使ES6 modules更接近于原生语义(native semantics)而不需要ES6兼容的浏览器引擎,UMD输出单个模块,从而可与AMD和 CommonJS一起配合

再次,在创建更轻量、可移植的项目方面。鉴于VS Code、Sublime、Atom和其他编辑器已经开始支持tsconfig.json文件,TypeScript 1.5的编译器也开始支持该类型文件,使得用户可以指定工程中的文件和编译选项。该方法创建的项目既可在命令行也可在编辑器中进行开发,更加轻量化。

最后,TypeScript 1.5还添加了ES7中建议的Decorator特性的支持,该特性目前由Angular、Ember和Aurelia团队在合作开发 。由于目前ES7仍然处于开发阶段,其Decorator特性也被视为实验性质。但是,用户目前已经可以进行体验,感受其强大之处。

下面是在Angular 2中使用decorators:

import {Component, View, NgFor, bootstrap} from "angular2/angular2";
import {loadFile} from "audioFile";
import {displayAudioFile} from "displayAudio";

@Component({selector: ‘file-list‘})
@View({
  template: `  
    <select id="fileSelect" size="5">    
      <option *ng-for="#item of items; #i = index"      
        [selected]="selected === item"(click)="updateSelection()">{{ item }}
      </option>  
    </select>`,  
  directives: [NgFor]
})

class MyDisplay {  
  items: string[];
  
  constructor() {    
    this.items = ["item1", "item2"];  
  }  
  updateSelection() { … }
}

Decorators可以将元数据(metadata)关联到类以及类成员上,并更新那些被装饰的功能。上面代码中,Angular 2使用Decorators来定义类中的HTML selector和template。

3. 参考资料

[1] Announcing TypeScript 0.8.1, 15 Nov 2012, http://blogs.msdn.com/b/typescript/archive/2012/11/15/announcing-typescript-0-8-1.aspx

[2] Announcing TypeScript 1.0, 2 Apr 2014, http://blogs.msdn.com/b/typescript/archive/2014/04/02/announcing-typescript-1-0.aspx

[3] Announcing TypeScript 1.5, 20 Jul 2015, http://blogs.msdn.com/b/typescript/archive/2015/07/20/announcing-typescript-1-5.aspx

[4] TypeScript 1.5正式发布:深度支持ECMAScript, 2015年7月26日, http://www.infoq.com/cn/news/2015/07/TypeScript-ECMAScript

[5] TypeScript的崛起, 2015年4月13日, http://www.infoq.com/cn/news/2015/04/TypeScript-rise

    英文The Rise of TypeScript? March 30, 2015, http://developer.telerik.com/featured/the-rise-of-typescript/

TypeScript系列1-1.5版本新特性

标签:

原文地址:http://my.oschina.net/1pei/blog/493012

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!