BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

TypeScript 2.3添加了泛型参数默认值和异步迭代器等特性

| 作者 Sergio De Simone 关注 18 他的粉丝 ,译者 Rays 关注 3 他的粉丝 发布于 2017年5月5日. 估计阅读时间: 5 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

TypeScript 2.3扩充了语言的语法,添加的内容包括支持泛型参数(Generic Parameter)定义默认值,以及支持异步的生成器(Generator)与迭代器(Iterator)。它还提供了新的编译选项,并引入了对语言服务器插件的官方支持,意在改进与现有JavaScript代码的集成。

泛型参数默认值类似于函数参数的默认值,它使TypeScript的泛型语法更为灵活。举个例子,假定一个泛型函数支持如下三种不同的调用方式:

declare function create(): Container;
declare function create(element: T): Container;
declare function create(element: T, children: U[]): Container;

如果使用泛型参数默认值,代码可以更紧致地编写成:

declare function create(element?: T, children?: U): Container;

对于函数参数默认值应符合的一系列规则,泛型参数默认值同样也应符合。例如,不允许在默认或可选(optinal)参数之后定义强制要求(required)参数、需要确保默认值满足所有类型参数上的约束等。

TypeScript 2.3不仅能使用编译器标识--downlevelIteration以ES3和ES5为生成目标编译生成器和迭代器,而且添加了对异步迭代器和生成器的支持。与非异步迭代一样,异步迭代器也提供了nextreturnthrow这三个方法。唯一的不同之处在于,异步迭代器返回的是一个Promise,而非实际的结果。例如:

interface AsyncIterator {
  next(value?: any): Promise>;
  return?(value?: any): Promise>;
  throw?(e?: any): Promise>;
}

异步生成器基于迭代器,是一种可生成部分计算结果的异步函数:

async function* g() {
  yield 1;
  await sleep(100);
  yield* [2, 3];
  yield* (async function *() {
    await sleep(100);
    yield 4;
  })();
}

与异步迭代器和生成器密切相关的是,TypeScript 2.3还引入了for..await..of语句。该语句的功能类似于非异步迭代器中的for..of语句。例如:

async function f() {
  for await (const x of g()) {
     console.log(x);
  }
}

对异步迭代器和生成器的支持(包括for..await..of在内)是可选择加入的特性。启用时需要在--lib编译选项中添加esnext

为简化与遗留JavaScript代码工作,TypeScript 2.3新增了一个编译器选项--checkJs。具体而言,设置了--checkJs后,TypeScript编译器也会对.js文件报错。这样,开发人员能捕获尽可能多的错误,无需将他们的文件强制转换为.ts文件。如果.js文件中添加了// @ts-nocheck//@ts-check注释,那么--checkJs选项将会跳过对该文件的查错。虽然.js文件不支持TypeScript类型标注,但是支持JDoc类型的标注,并将逐步转到支持TypeScript。

另一个新的编译器选项是--strict标识,该标识意在简化开发人员对可用的最高层级类型安全的选取。--strict标识在使用tsc --init新建的项目中是默认使用的,它等价于:

  • --strictNullChecks
  • --noImplicitAny
  • --noImplicitThis
  • --alwaysStrict

最后一点,TypeScript 2.3引入了一个语言服务器插件API,意在通过加入Angular等模板系统及TSLintGraphQL等其它类型的内容,加大编辑器对TypeScript的支持,实现自动补全等高级特性。

查看英文原文:TypeScript 2.3 Adds Generic Default Arguments, Async Iterators Support, and More

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT