TypeScript 1.7發布:支持async/await、模塊化、多態this和求冪語法

jopen 9年前發布 | 12K 次閱讀 TypeScript

伴隨著Visual Studio 2015 Update 1的發布,TypeScript 1.7也發布了,新版本默認支持ES6 (ECMAScript 6)的async/await以及模塊化特性,支持多態“this”類型,支持ECMAScript 2016提出的求冪語法。詳細的變更列表,可以查看GitHub上的路線圖

和之前一樣,用戶可以通過Visual Studio 2015 Update 1Visual Studio 2013NPM或者直接通過源碼來使用TypeScript 1.7 。

Async/Await

在1.7版本中,用戶能夠在啟用了ES6 Generator支持的目標上(例如Node.js V4及更高版本)使用async函數。而使用了async前綴的函數是異步函數,開發者可以在程序中使用await關鍵字來停止異步函數的執行,直到約定被滿足為止。示例如下:

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

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

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

Microsoft正在努力將TypeScript中的async/await支持擴展到其他領域,包括瀏覽器這一并不支持ES6 Generator 的領域。如果想要了解async/await的實現細節以及使用方法,可以查看博文《什么是Async/Await》

多態this類型

在經過了大量的社區討論和反饋之后,TypeScript 1.7增加了一個新的多態this類型。開發者能夠在類和接口中使用this類型,以表示某些類型是包含類型的子類型(而不是包含類型本身)。該特性能夠讓層級流式API這樣的模式更加容易表達。

interface Model {
    setupBase(): this;
}

interface AdvancedModel extends Model { setupAdvanced(): this; }

declare function createModel(): AdvancedModel; newModel = newModel.setupBase().setupAdvanced(); // fluent style works</pre>

如果想深入了解該關鍵字,可以查看TypeScript Wiki

作為支持該特性的一部分,TypeScript 1.7修改了this的類型推理邏輯。在一個類中,值this的類型將會被推斷為this類型,用后續的原始類型值賦值會失敗。作為一種替代方法,用戶可以為this添加一個類型注解。使用替代方法的代碼示例以及其他可能的重大變化可以查看GitHub。

ES6模塊

TypeScript 1.7將ES6添加到了選項列表中,開發者能夠使用--module標記,當目標為ES6的時候指定模塊化輸出。這一特性為用戶提供了更多的擴展性,讓用戶能夠針對具體的運行時精確地指定特性。例如,現在能夠以Node.js v4為目標,它并不支持ES6模塊,但是支持一些其他的ES6特性。

//tsconfig.json targeting node.js v4 and beyond
{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es6"
    }
}

ES7求冪運算

最后是一個小語法糖。ECMAScript委員會最近將求冪運算符提議移動到了第三階段。對于Microsoft來說這表示在TypeScript中采納該特性的時機已經成熟,于是在TypeScript 1.7中添加了對它的支持。

let squared = 2 ** 2;  // same as: 2 * 2
let cubed = 2 ** 3;  // same as: 2 * 2 * 2
let num = 2;
num **= 2; // same as: num = num * num;
Say goodbye to Math.pow()!

下一步計劃

雖然Microsoft非常愉快地宣布了他們在該版本中做的所有提升,但是Microsoft也一如既往地關注社區的反饋。如果你對TypeScript的未來非常關注,那么Microsoft非常鼓勵你檢出已有的問題給他們提出pull request,或者在Gitter上與TypeScript團隊交流。



來自:http://www.infoq.com/cn/news/2015/12/microsoft-released-typescript-1-

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!