TypeScript 1.7 发布,默认支持 ES6 async/await 特性

新版本的TypeScript已推出期待已久的ECMAScript 6异步功能。同时未来计划将该功能支持到ES3和ES5。TypeScript 1.7还包括多态this类型和一些重大的变化。

默认支持ECMAScript 6 (ES6)的async/await功能的微软JavaScript扩展语言TypeScript的博客最新连载已经发布。这意味着ES6 Generator支持的目标上比如Node4及以上版本现在可以去调用异步方法不受阻塞的去完成异步操作。

下面来自Github的示例已经提供了参考:

"use strict";

// printDelayed is a 'Promise<void>'
async function printDelayed(elements: string[]) {
 for (const element of elements) {
 await delay(200);
 console.log(element);
 }
}

async function delay(milliseconds: number) {
 return new Promise<void>(resolve => {
 setTimeout(resolve, milliseconds);
 });
}

printDelayed(["Hello", "beautiful", "asynchronous", "world"]).then(() => {
 console.log();
 console.log("Printed every element!");
});

看TypeScript的更新文档,TypeScript的团队计划在TypeScript2.0版中使async/await支持ES3和ES5。ES6也被添加到--module标记的可供选择列表中,并且允许你指定ES6时指定的模块输出。

{
 "compilerOptions": {
 "target": "es6",
 "module": "es6",
 "sourceMap": true
 }
}

另外一个新特性介绍了在多态中引入了this类型以便于创建流式风格的APIs。this类型在描述类库中多类型交集中也是有效的就像Ember.js中使用mixin-style表达式去描述继承。

最后但并非最不重要,微软的团队已经知道了ECMAScript委员会最近将求幂运算符提议移动到了第三阶段并且在TypeScript1.7版本中支持操作符****=。该操作符在ES3和ES5中将被转化为Math.pow输出。

重大改变

关于重大改变,在一个类中,值this的类型将会被推断为this类型。推荐开发者可以为this添加一个类型注释,比如下面的示例:

示例:

class Fighter {
 /** @returns the winner of the fight. */
 fight(opponent: Fighter) {
 let theVeryBest = this;
 if (Math.rand() < 0.5) {
 theVeryBest = opponent; // error
 }
 return theVeryBest
 }
}

建议:

添加类型注解:

class Fighter {
 /** @returns the winner of the fight. */
 fight(opponent: Fighter) {
 let theVeryBest: Fighter = this;
 if (Math.rand() < 0.5) {
 theVeryBest = opponent; // no error
 }
 return theVeryBest
 }
}

关键字abstract, public, protectedprivate在ES3中是未来保留字并且受到自动分号插入 (ASI)的影响。以前TypeScript在这些关键词自成一行时绝不允许插入分号,现在这个问题修复了,在下面的示例中abstract class D已不再正确继承C, 并且相反的是定义了一个具体的方法m和添加了一个abstract属性。

示例:

abstract class C {
 abstract m(): number;
}
abstract class D extends C {
 abstract
 m(): number;
}

建议:
为了避免出现问题,在定义类成员的关键字后删除换行符,一般来说能避免受到ASI的影响。

对于TypeScript更加详细的描述,请访问他们在Github上的代码仓库。

《TypeScript 1.7 发布,默认支持 ES6 async/await 特性》有2个想法

发表评论