生成式AI领域的最新成果都在这里!抢 QCon 展区门票 了解详情
写点什么

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:002015
用户头像

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

关注

评论

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

35岁程序员半月4轮面试,HR的话扎心了

策划Java工程师

Java 程序员 面试 后端

来自跨越边界的急件,我推荐你用这三步,走出锁住你的圈套。

叶小鍵

Vue进阶(幺捌零):JS 向 Vue 传值

No Silver Bullet

Vue 8月日更

爱你的人,会管着你。而不是惯着你。

石云升

娱乐圈 8月日更 刑法

gopher成长之路(二):听万俊峰老师演讲有感

非晓为骁

学习 个人成长 gopher

35岁的程序员被裁,电子版已问世

策划Java工程师

Java 程序员 面试 后端

35岁程序员半月4轮面试,项目实战

策划Java工程师

Java 程序员 面试 后端

如何做分库分表,常见方案汇总

架构精进之路

MySQL 分库分表 8月日更

Java中的JVM是如何实现多线程的?

程序员阿杜

Java JVM 多线程 8月日更

恐惧和自我偏见 -- 成长的最大障碍

俞凡

认知

Cobra 快速入门 - 专为命令行程序而生

xcbeyond

cobra Go 语言 8月日更

01-架构的定义

Lane

Python 数值中的下划线是怎么回事?

Python猫

Python

🏆【Java技术之旅】教你如何使用异步神器CompletableFuture

洛神灬殇

Java 异步编程 8月日更 CompetableFuture

十大排序算法--冒泡排序

Ayue、

排序算法 8月日更

使用PSI(Pressure Stall Information)监控服务器资源

swordholder

Linux DevOps Linux Kenel linux运维

01 设计模式之单例模式

陈皮的JavaLib

设计模式 单例模式 8月日更

异常机制的概述

程序员阿杜

Java 8月日更

【Flutter 专题】131 图解 AnimatedList 动画列表

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 8月日更

互相讨厌的奥运与气候

脑极体

Web 身份验证:Cookie 与 令牌

devpoint

Cookie 8月日更

架构训练营模块 2 作业 - 学生信息管理系统的架构文档 - 江哲

江哲

kubernetes/k8s CRI 分析 - 容器运行时接口分析

良凯尔

Kubernetes 源码分析 Kubernetes Plugin #Kubernetes# cri-o

中大型组织 DevOps 成熟度模型设计

Phodal

DevOps thoughtworks phodal

架构实战营-毕业总结

大可

Java 代理模式

gin

Java 代理 Proxy

Vue进阶(幺柒幺):前端用户体验提升(五)Flex实现弹性布局

No Silver Bullet

Vue Flex 8月日更

渣男已经预订大碗牢饭,“科技渣男”怎么还在疯狂套路?

白洞计划

Numpy 常用数据结构和清理函数

若尘

Numpy 数据清洗 Python编程 8月日更

Spring 源码解析 -- SpringWeb过滤器Filter解析

Java spring 源码阅读

八月未央,早睡早起

escray

读书笔记 8月日更

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