写点什么

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

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

关注

评论 1 条评论

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

JDBC拾遗

qihuajun

父亲节会员礼遇免费送,联想来酷重点发力"健康赛道"

Geek_116789

第三周总结

李白

架构师训练营 - 作业 - 第四周

心在飞

极客大学架构师训练营

出海蓝军先锋联想来酷,今夏再征"丝路"

Geek_116789

猿灯塔:关于Java面试,你应该准备这些知识点

猿灯塔

面试

数据库周刊30丨数据安全法草案将亮相;2020数据库产业报告;云南电网上线达梦;达梦7误删Redo Log;Oracle存储过程性能瓶颈;易鲸捷实践案例……

墨天轮

MySQL 数据库 oracle mongodb 周刊

自己动手编译一个HEIF图片转jpeg工具(Mac平台)

GeorgeMR

HEIF HEIC jpeg 图片

架构师训练营 No.4 周总结

连增申

分布式计算DAG1-画猫

Hervor。

可读代码编写炸鸡三 - 审美

多选参数

代码质量 代码 代码注释

可读代码编写炸鸡四(上篇) - 来写注释

多选参数

代码质量 代码 代码注释

信创舆情一线--数据安全法草案提请初审

统小信uos

大数据 安全

架构师训练营 - 系统架构

Pontus

极客大学架构师训练营

消息队列(六)如何处理消费者故障导致的百万消息积压?

奈何花开

Java MQ 消息队列

第四周学习总结

李白

印度下黑手!59款中国APP被禁用,微信微博QQ抖音等在列

程序员生活志

真棒! 20 张图揭开内存管理的迷雾,瞬间豁然开朗

小林coding

Linux 操作系统 计算机基础 内存管理

作业 - 第4周

Happy-Coming

架构师训练营第四周总结:互联网架构概要

hifly

高可用 高性能 极客大学架构师训练营 互联网架构

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

jiangnanage

时间管理的本质到底是什么?

非著名程序员

程序员 提升认知 时间管理

Python中进行None判断时,为什么用is而不是==

王坤祥

Python 编程 进阶 计算机基础

架构师训练营 第4周作业

坂田吴奇隆

极客大学架构师训练营

架构师训练营-第4周总结

坂田吴奇隆

极客大学架构师训练营

架构师训练营第四周作业

Bruce Xiong

一个大型互联网应用采用的技术方案和手段

李白

第三周作业

李白

架构师训练营第 04周——总结

李伟

极客大学架构师训练营

Mac开发环境 React Native0.60 环境 安卓环境Java变量 及~/.zshrc文件配置

蛋蛋

React

为什么大公司一定要使用DevOps?

张启华

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