博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TypeScript系列1-简介及版本新特性
阅读量:5894 次
发布时间:2019-06-19

本文共 3643 字,大约阅读时间需要 12 分钟。

  hot3.png

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]。 

    2015年9月2日TypeScript1.6 Beta版本发布[6]。

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.tsexport 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.tsimport {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和其他编辑器已经开始支持文件,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: `      
          
{
{ item }}            `,    directives: [NgFor]})class MyDisplay {    items: string[];    constructor() {        this.items = ["item1", "item2"];    }    updateSelection() { … }}

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

3. TypeScript 1.6 Beta版本新特性

React中采用JSX语法编写DOM和native component,但JSX语法与TypeScript中的映射(cast)语法冲突。

为了支持React/JSX, TypeScript从1.6版本开始引入一个新的.tsx文件后缀,使能TypeScript文件中的JSX,同时采用新的'as'运算符作为映射的缺省方式[6]。

同时,对象检查规则更加严格,例如

var x: { foo: number };x = { foo: 1, baz: 2 };  // 错误,多了一个property 'baz', 但在1.6版本之前无法检测出var y: { foo: number, bar?: number };y = { foo: 1, baz: 2 };  // 错误, 多了一个或拼写错误property 'baz', 但在1.6版本之前无法检测出

另外,提升模块解析,使解析更为自然。还增加支持ES6中类表达式(class expressions),开始支持generators。

4. 参考资料

[1] Announcing TypeScript 0.8.1, 15 Nov 2012,

[2] Announcing TypeScript 1.0, 2 Apr 2014, 

[3] Announcing TypeScript 1.5, 20 Jul 2015, 

[4] TypeScript 1.5正式发布:深度支持ECMAScript, 2015年7月26日, 

[5] TypeScript的崛起, 2015年4月13日, 

    英文The Rise of TypeScript? March 30, 2015, 

[6] Announcing TypeScript 1.6 Beta: React/JSX, better error checking, and more, 2 Sep 2015, 

转载于:https://my.oschina.net/1pei/blog/493012

你可能感兴趣的文章
第6天:XHTML代码规范
查看>>
阿里云数据库Greenplum版发布啦
查看>>
Cocos2d-x3.2 Progress进度条
查看>>
无法在“EntityFramework”已存在的情况下创建影像复制该文件的解决方案
查看>>
iOS开发UI篇—在UItableview中实现加载更多功能
查看>>
SQL Server删除distribution数据库
查看>>
您还有心跳吗?超时机制分析
查看>>
【DataGuarad】ORA-1153 trying to turn on Flashback for Physical Standby Database 2011-10-
查看>>
[Google Guava] 2.3-强大的集合工具类:java.util.Collections中未包含的集合工具
查看>>
如何分析D状态进程
查看>>
kotlin-拉姆达表达式
查看>>
Ant design的Notification源码分析
查看>>
时尚大片,竟是这样p出来的!
查看>>
Python基础(08)Python中整数和浮点数
查看>>
TypeScript学习笔记-类
查看>>
OkHttp工作流程
查看>>
vue 路由监控
查看>>
前端零基础 JS 教学 第二天 02 - day关系运算符与流程控制循环详细讲解 for switch 等...
查看>>
canvas 梦幻的随机例子效果
查看>>
机器学习实战教程(十一):线性回归基础篇之预测鲍鱼年龄
查看>>