速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

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

关注

评论 1 条评论

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

效率思维模式与Zombie Scrum

易成研发中心

敏捷开发

如何做好职场印象管理?

石云升

职场 印象管理 职场形象

ArrayList哪种循环效率更好你真的清楚吗

root

Java 后端 ArrayList 循环效率 方式

一款跨平台免费的开源 SQL 编辑器和数据库管理器!

JackTian

数据库 sql GitHub 开源 实用工具

golang-pprof实战笔记

卓丁

pprof 性能分析 Go 语言

Git 基础知识学习

LeoBing

[安利] 可能会让你爱上书写的工具组合!

猴哥一一 cium

Typora markdown markdown编辑器 玩转写作平台

区块链系列教程之:比特币的钱包与交易

程序那些事

比特币 区块链 智能合约 钱包 交易

实现一个redis命令--nonzerodecr

老胡爱分享

redis 源码分析 源码阅读

架构师第二周学习总结

陈靓-哲露

由一次管理后台定时推送功能引发的对 RabbitMQ 延迟队列的思考 (二)

LSJ

Java RabbitMQ 延迟队列 优先级队列

架构师训练营 - 第2周学习总结

红了哟

SpringIOC 是依赖倒置吗?

yupi

软件设计原则

yupi

Kafka面试题:基础27问,必须都会的呀!

Java小咖秀

大数据 kafka 分布式 队列 延时消息

【Golang runtime学习笔记-启动过程分析】

卓丁

初始化 runtime 汇编 Go 语言

Java操作Excel竟如此简单

生命在于折腾

Java EasyExcel

优化工程师逻辑视角下的微信“拍一拍”功能

Earth_Polarbear

人工智能 微信 系统工程 优化逻辑

游戏夜读 | RPG的美式和日式

game1night

程序员的晚餐 | 6 月 20 日 随便牛肉和翡翠白玉

清远

美食

[架构师训练营] 2 依赖倒置

悬浮

啥是CPU缓存?又如何提高缓存命中率呢?

八两

从拼多多突破阿里和京东两大巨头绞杀,市值破千亿美金来看职业价值链

非著名程序员

程序员 程序人生 职业规划 职业成长

大话设计模式 | 3. SOLID原则

Puran

设计模式

架构师训练营第二周作业

陈靓-哲露

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

张明森

架构师训练营 - 第 2 周命题作业

红了哟

LeetCode | 4. Palindrome Number 回文数

Puran

Python C# 算法 LeetCode

终于有人把 java代理 讲清楚了,万字详解!

root

Java jdk 后端 动态代理 cglib

在项目中随手把haseMap改成了currenHaseMap差点被公司给开除了

root

Java 后端 BigDecimal金额 Arrays.asList

策略模式解析

Seven七哥

设计模式 策略模式

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