TypeScript 1.7 发布:支持 async/await、模块化、多态 this 和求幂句子模式
8年前
随着 Visual Studio 2015 Update 1 的发布,TypeScript 1.7 也随之发布。 新版本默认支持ES6(ECMAScript 6)的async/await和模块化特性,支持多态“this”类型,支持ECMAScript 2016类型提出的求幂语句。 有关更改的详细列表,请查看 GitHub 上的路线图。
和以前一样,用户可以通过 Visual Studio 2015 Update 1、Visual Studio 2013、NPM 或直接通过源代码使用 TypeScript 1.7。
异步/等待
在 1.7 版本中,用户还可以在启用了 ES6 Generator 支持的目标(例如 Node.js V4 及更高版本)上使用异步函数。 以 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!"); });
Microsoft 正在致力于将 TypeScript 中的异步/等待支持扩展到其他领域,包括不支持 ES6 生成器的浏览器。 如果想了解async/await的实现细节和使用方法,可以查看博文《什么是Async/Await》。
多态这个类型
经过大量社区讨论和反馈,TypeScript 1.7 放弃了这种类型的新多态。 开发人员可以在类和套接字中使用此类型来指示单个类型是包含类型(而不是包含类型本身)的子类型。 此功能可以更轻松地表达分层流 API 等模式。
interface Model { setupBase(): this; } interface AdvancedModel extends Model { setupAdvanced(): this; } declare function createModel(): AdvancedModel; newModel = newModel.setupBase().setupAdvanced(); // fluent style works
要深入了解此关键字,您可以查看 TypeScript Wiki。
作为支持此功能的一部分,TypeScript 1.7 更改了类型推断逻辑。 在类中,值 this 的类型将被推断为 this 的类型,后续的原始值参数将失败。 作为替代方案,用户可以为此添加类型注释。 使用被取代方法的代码示例以及其他可能的重大更改可在 GitHub 上找到。
ES6模块
TypeScript 1.7 将 ES6 添加到选项列表中typescript 混合类型,因此开发人员可以在针对 ES6 时使用 --module 标志来指定模块化输出。 该功能为用户提供了更多的可扩展性,允许用户精确指定特定运行时的特征。 例如,现在也可以针对 Node.js v4,它不支持 ES6 模块,但支持其他一些 ES6 功能。
//tsconfig.json targeting node.js v4 and beyond { "compilerOptions": { "module": "commonjs", "target": "es6" } }
ES7求幂运算
最后加一句糖。 ECMAScript 委员会最近将求幂运算符提案提交到了第 3 阶段。对于 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 特别高兴地宣布他们在此版本中所做的所有改进typescript 混合类型,但 Microsoft 也一如既往地关注社区反馈。 如果您担心 TypeScript 的未来,Microsoft 特别鼓励您检查现有问题,为它们提交拉取请求,或者在 Gitter 上与 TypeScript 团队聊天。
从:
发表评论