写点什么

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

  • 2017-05-04
  • 本文字数:1466 字

    阅读完需:约 5 分钟

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

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

复制代码
declare function create(): Container<htmldivelement htmldivelement="">;
declare function create<t extends="" htmlelement="">(element: T): Container<t t="">;
declare function create<t extends="" htmlelement="" u="">(element: T, children: U[]): Container<t u="">;</t></t></t></t></htmldivelement>

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

declare function create<t extends="" htmlelement="HTMLDivElement," u="T[]">(element?: T, children?: U): Container<t u="">;</t></t>对于函数参数默认值应符合的一系列规则,泛型参数默认值同样也应符合。例如,不允许在默认或可选(optinal)参数之后定义强制要求(required)参数、需要确保默认值满足所有类型参数上的约束等。

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

复制代码
interface AsyncIterator<t> {
next(value?: any): Promise<iteratorresult><t>>;
return?(value?: any): Promise<iteratorresult><t>>;
throw?(e?: any): Promise<iteratorresult><t>>;
}
</t></iteratorresult></t></iteratorresult></t></iteratorresult></t>

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

复制代码
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 等模板系统及 TSLint GraphQL 等其它类型的内容,加大编辑器对 TypeScript 的支持,实现自动补全等高级特性。

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

2017-05-04 19:002642
用户头像

发布了 227 篇内容, 共 86.4 次阅读, 收获喜欢 28 次。

关注

评论

发布
暂无评论
发现更多内容

Springboot快速整合JPA实现增删查改,linux系统架构和应用技巧

Java 程序员 后端

SpringBoot整合Thymeleaf模板,java技术核心卷二

Java 程序员 后端

SpringBoot系列:Spring Boot集成redis,mongodb原理书籍推荐

Java 程序员 后端

dart系列之:dart语言中的特殊操作符

程序那些事

flutter dart 程序那些事 11月日更

springboot入门教程和mysql数据库,java框架面试基础

Java 程序员 后端

六问六答理解ForkJoin原理

华为云开发者联盟

Java 线程 线程池 forkjoin 归并计算

springboot+Redis+Shiro,java编程技术高级八大类

Java 程序员 后端

springboot多数据源配合docker部署mysql主从实现读写分离

Java 程序员 后端

SpringBoot实战教程(3,mysql集群和主从原理

Java 程序员 后端

SpringBoot整合Shiro(完整版),java学习网站

Java 程序员 后端

SpringBoot使用Aop自定义注解展示日志信息,mysqlsql性能调优的方法

Java 程序员 后端

Springboot快速整合JPA实现增删查改(1),java教程视频下载

Java 程序员 后端

SpringBoot整合MybatisPlus实战动态SQL,java编程入门经典

Java 程序员 后端

SpringBoot整合Shiro实现权限管理,rabbitmq原理图

Java 程序员 后端

springboot整合thymeleaf及常用标签的使用方法,美的java面试流程

Java 程序员 后端

SpringBoot+Redis基本操作,实现排行榜功能(1),springmvc教程下载

Java 程序员 后端

springboot中如何使用拦截器,Javaweb资料视频

Java 程序员 后端

Windows/Mac 安装、使用Python环境+jupyter notebook

老表

python入门 11月日更 Python自动化 运营学Python

Springboot整合ActiveMQ(Queue和Topic两种模式),Java开发者跳槽指

Java 程序员 后端

SpringBoot整合Shiro(完整版)(1),java企业级应用教程视频

Java 程序员 后端

springBoot集成Mybatis,Java资料下载

Java 程序员 后端

SpringBoot2----Web模块的基本注解,美的java面试题

Java 程序员 后端

SpringBoot2----数据访问,实战java虚拟机百度云

Java 程序员 后端

最佳实践|放弃 Ceph,Salesforce 使用 Apache BookKeeper 在云中实现最强存储

Apache Pulsar

开源 云原生 存储系统 Apache Pulsar 消息系统 Apache BookKeeper

SpringBoot+Redis基本操作,实现排行榜功能,javasql优化面试题

Java 程序员 后端

Springboot整合Mybatis增删查改、连接MYSQL数据库及配置druid连接池

Java 程序员 后端

Vue进阶(幺柒叁):表单元素日期校验

No Silver Bullet

Vue 表单校验 11月日更

SpringBoot2----拦截器和文件上传功能,源码+原理+手写框架

Java 程序员 后端

SpringBoot:Shiro-整合-Redis,也不用担心用户投诉啦,java技术经理面试题

Java 程序员 后端

TypeScript 2.3添加了泛型参数默认值和异步迭代器等特性_JavaScript_Sergio De Simone_InfoQ精选文章