写点什么

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

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

关注

评论

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

如何在嵌入式软件开发的过程中使用DevSecOps方法,提升开发效率与安全性

龙智—DevSecOps解决方案

DevOps DevSecOps

一站式IT统一运维管理平台有哪些?大家都在用哪个?

行云管家

IT运维 运维管理 统一运维

企业数智化领先实践,学得会!

用友BIP

数智化转型

Parallels Desktop 19 虚拟机 一键激活 无需关闭sip

繁星

pd虚拟机 Parallels Desktop 19 pd虚拟机 19

探秘英伟达显卡的制造之路 | 英伟达断供GPU,中国大模型何去何从?

GPU算力

数智化采购平台覆盖间接采购全流程,现金流优化的“小成大就”

用友BIP

数智采购

犀牛Rhino 8 for Mac(3D建模软件)

展初云

Mac 建模软件 Rhino 犀牛

After Effects 2024 for Mac(ae视频特效制作工具)

展初云

Mac软件 视频编辑 AE After Effects

Kontakt Factory Library 2(Kontakt原厂音色库)

展初云

Mac软件 音色库 Kontakt

万界星空科技MES与WMS如何集成的?

万界星空科技

数字化转型 工业互联网 wms mes 3D仓库

人民网《外企谈信心》| Denodo:加强数据管理技术合作 护航数字经济高质量发展

科技汇

数智化营销——企业会员私域运营的成功路径

用友BIP

数智营销

治理效率提升77%!揭秘基于DataLeap实时健康分的最佳实践

字节跳动数据平台

数据库 数据治理 数据安全 数据研发 企业号11月PK榜

Nginx 知识点一网打尽:动静分离、压缩、缓存、跨域、高可用、性能优化

郑在暴富中

nginx 高可用 反向代理

【实践篇】一次Paas化热部署实践分享 | 京东云技术团队

京东科技开发者

热部署 PaaS平台化能力 企业数字化 PaaS 平台 企业号11月PK榜 Paas化

您的代理记账企业的数字化保卫和合作伙伴-智慧云

知者如C

jar包的精细化运营,Java模块化简介 | 京东云技术团队

京东科技开发者

Java Java9 模块化 jar包

组态软件特点及工控组态软件应用

2D3D前端可视化开发

物联网 组态软件 PLC 工业控制系统 web组态编辑器

深度开发者故事|API Explorer 助力教育行业 一站式搭建实验环境

华为云PaaS服务小智

云计算 软件开发 华为云

MegEngine 9-10 双月报:新版本发布,AI 生态升级,不容错过!

MegEngineBot

深度学习 开发者 开源社区 MegEngine

安全审计 合约审计:代币开发公司的一个关键方面

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 NFT开发

机械加工行业云MES解决方案

万界星空科技

工业互联网 制造业 生产管理系统 mes 机械臂

PCB设计安规丨电气间隙与爬电距离要点

华秋电子

全网累计销量TOP 1的TCL超薄嵌入式冰箱,跟着选0出错!

科技热闻

日常数字生活中,手机里的隐私信息是如何被保护的?

最新动态

深入理解 Dubbo 协议的调试方法与实践

Apifox

Java 程序员 dubbo 后端 RPC

龙芯浏览器是哪家公司开发的?支持信创吗?

行云管家

浏览器 信创 国产化 龙芯浏览器

可跨平台数据库多连管理工具:Navicat Premium 16 中文版

繁星

数据库管理 Navicat Premium 16

KubeEdge-Ianvs v0.2 发布:终身学习支持非结构化场景

华为云开发者联盟

云计算 云原生 后端 华为云 华为云开发者联盟

vivo 网络端口安全建设技术实践

vivo互联网技术

网络端口风险治理 端口扫描 流量行为基线 端口管理规范 漏洞扫描平台

观测云产品更新 | 单点登录新增 OIDC / Oauth2.0 协议、数据转发优化、场景优化等

观测云

可观测性 单点登录 #数据分析

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