【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

TypeScript 3.1 增加可映射元组和数组类型

  • 2018-10-10
  • 本文字数:1161 字

    阅读完需:约 4 分钟

TypeScript 团队最近发布了TypeScript 版本3.1 ,继3.0 版本之后添加了可映射元组和数组类型以及其他一些改进。

几乎每个JavaScript 应用程序都需要映射列表中的值,这种模式在ES2015 中通过剩余参数进行了简化。

TypeScript 团队提供的一个常见示例:

复制代码
function stringifyAll(...elements) {
return elements.map(x => String(x));
}

根据 TypeScript 博客所述:

stringifyAll 函数可以接受任意数量的值,将每个元素转换为字符串,将每个结果放在一个新数组中,然后返回该数组。如果我们想要 stringifyAll 具有最通用的类​​型,需要将其声明为:

复制代码
declare function stringifyAll(...elements: unknown[]): Array<string>;

在这个例子中,函数接受任意数量的元素,并返回一个字符串数组,但是有关元素数量的类型信息将会丢失。以前的解决方案是重载函数定义,这样很不方便:

复制代码
declare function stringifyAll(...elements: []): string[];
declare function stringifyAll(...elements: [unknown]): [string];
// ... etc.

TypeScript 已在之前的版本中引入了映射对象类型,但不能完美应用于元组和数组类型。新版本的变化是这个方法现在可以按预期工作,而不会抛出异常。

根据 TypeScript 博客所述:

从技术层面看,行为可以保持一致,我们团队的大部分人认为这种用法是没有问题的。在迭代元组和数组时,映射对象类型现在可以“做正确的事”,并没有引入用于映射元组的新概念。这意味着如果你已经在使用现有的映射类型(如 Partial 或者 lib.d.ts 中的 Required),它们会立即自动处理元组和数组。虽然非常通用,但你可能会注意到这个功能意味着 TypeScript 现在可以更好地表达类似于 Promise.all 的函数。虽然这一变更尚未被包含在这一版本中,但会在不久的将来出现。

3.1 版本的另一个重要补充是简化了在函数声明上指定属性。React 用户对此应该很熟悉,它类似于 defaultProps。

因为函数在 JavaScript 中也是对象,所以可以很容易地向函数添加属性。TypeScript 最初的解决方案是使用命名空间,但在与 ES 模块一起用时带来了一些挑战,而且无法与 var、let 或 const 进行合并声明。

在 TypeScript 3.1 中,通过函数初始化进行的函数声明或 const 声明都会导致类型检查器分析父作用域,以便跟踪新添加的属性。

3.1 版本还包含了很多其他较小的变更和增强功能。

在 3.1 版本之外,TypeScript 3.2 版本将带来更多改进。最大的一个改进是函数的严格绑定、调用和方法应用,这是社区近四年前要求添加的复杂增强功能。这个增强解决了部分与变元相关的问题,变元相关问题是支持高阶函数类型最具挑战性的问题集合。 BigInt 支持也是 3.2 版本的一部分。

TypeScript 是基于 Apache 2 许可的开源软件,可以通过 TypeScript GitHub 项目主页参与贡献和反馈。

查看英文原文 TypeScript 3.1 Adds Mappable Tuple and Array Types

2018-10-10 05:361361
用户头像

发布了 731 篇内容, 共 433.7 次阅读, 收获喜欢 1997 次。

关注

评论 1 条评论

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

SpringBoot分布式验证码登录方案

Bruce Duan

验证码 Kaptcha

第七章总结

李白

报销流程太慢太复杂?区块链技术引入票据系统效率翻一倍

CECBC

数据共享 电子票据 优化业务 可信体系

埋点全解析,你最关心的可视化埋点在这里!

易观大数据

性能压测工具

武鹏

第7章总结

武鹏

Week07总结

熊威

《深度工作》学习笔记(1)

石云升

读书笔记 专注 深度工作

全国第一枚企业区块链电子印章诞生

CECBC

萝卜章 区块链印章 全流程上链 e签宝

架构师训练营——第7周作业

jiangnanage

Week07作业

熊威

week07 作业

Safufu

week07总结

Safufu

总结

孙强

架构师训练营第七周作业

Bruce Xiong

架构师培训第七周练习

小蚂蚁

乘风破浪的文思海辉,以及TA的行业数字化“新人设”

脑极体

Gossip 协议详解

古月木易

Gossip

架构师第七周学习总结

小蚂蚁

关于性能测试和优化的一些总结和思考

2流程序员

Week7作业总结

丿淡忘

第7周作业

上山砍柴

中国区块链服务网络 BSN 宣布集成以太坊等六大知名公链

CECBC

BSN 集成公链 标准框架 底层基础设施

架构师训练营课后总结-性能测试

superman

架构师训练营第7周——学习总结

jiangnanage

架构师第七周

Tulane

一周信创舆情观察(7.13~7.19)

统小信uos

数据库 舆情 芯片

架构师课作业 - 第七周

Tulane

手写一个http性能测试工具(golang实现)

2流程序员

MySQL常用函数

Bruce Duan

mysql常用函数

Gossip 协议详解

奈学教育

Gossip

TypeScript 3.1增加可映射元组和数组类型_JavaScript_Dylan Schiemann_InfoQ精选文章