【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

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

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

关注

评论 1 条评论

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

千万级学生管理系统考卷模块存储架构设计

泋清

#架构训练营

Android MediaPlayer音频播放器详解

yechaoa

android 6月月更 MediaPlayer

【mycat】mycat在windows环境下的安装和启动

迷彩

架构 mycat 数据库中间件 MySQL 数据库 6月月更

力扣每日一练之数组下篇Day3

京与旧铺

6月月更

详解python的运行方式

左手の明天

Python 运行原理

华为云图引擎服务

程思扬

华为 华为云 云开发

Java 应用压测性能问题定位经验分享

阿里巴巴云原生

阿里云 云原生 压测 性能压测

异步任务处理系统,如何解决业务长耗时、高并发难题?

阿里巴巴云原生

阿里云 Serverless 云原生 函数计算 FC

如何设计业务高性能高可用存储架构 - 作业

阿拉阿拉幽幽

列表视图——基于函数的视图 Django

海拥(haiyong.site)

Python django 6月月更

网上教学 助力战疫 | 社区征文

yu

原创 原创保护 初夏征文

《清单革命》:如何忙而不乱?

郭明

读书笔记

NFT新范式,OKALEIDO创新NFT聚合交易生态

EOSdreamer111

架构实战营|模块4

KDA

#架构实战营

Prometheus、Grafana安装配置linux服务器监控dashboard

橙子猿

golang Prometheus #Grafana

NFT新范式,OKALEIDO创新NFT聚合交易生态

鳄鱼视界

OKALEIDO:NFT交易平台的发展趋势是什么?

股市老人

读书笔记之《网络是怎样连接的》

蔡农曰

开发 网络 计算机 后端开发

Switch 块、Switch 表达式、Switch 模式匹配,越来越好用的 Switch

看山

Java Switch

《网络是怎么样连接的》读书笔记 - 认识网络基础概念(一)

懒时小窝

网络编程

关于分布式系统一致性

Joseph295

TypeScript中你可能会忽略的细节

真嗣

typescript 前端

测试开发【Mock平台】07开发:项目管理(三)组件Modal和Form讲解,并利用其实现添加功能

MegaQi

测试平台开发教程 6月月更 测试技术干货

vue全局守卫

小恺

6月月更

Java—虚拟机

武师叔

6月月更

GNU/Linux知识库(3)- 命令行和包管理

冯亮

Linux DevOps GNU

架构训练营模块四作业

融冰

千万级学生管理系统的考试试卷存储方案

joak

简约而不简单的Kanban方法

Bruce Talk

Kanban 敏捷开发 Agile

千万学生管理系统试卷存储方案

intelamd

数据洞察力

奔向架构师

数据资产 6月月更

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