如何轻松和安全地构建的满足合规要求的智能产品,实现业务需求?4月26日,告诉你答案! 了解详情
写点什么

TypeScript 发布 3.2 版本,改进元编程支持、新增 BigInt

  • 2018 年 12 月 02 日
  • 本文字数:1564 字

    阅读完需:约 5 分钟

TypeScript发布3.2版本,改进元编程支持、新增BigInt

TypeScript 团队发布了 TypeScript 3.2 版本,改进了对各种元编程模式、泛型类型的“对象扩展(Object spread)”和“对象截取(Object rest)”支持。该版本还引入了BigInt,为支持 3 阶段 ECMAScript 提案的环境提供支持。


TypeScript 3.2 针对 bind、call 和 apply 增加了更为严格的类型检查,还增加了一个对完全支持“可变方法(Variadic Kinds)”而言其中一个非常重要的部分。TypeScript 项目经理 Daniel Rosenwasser 解释了这些额外的类型检查的重要性:


在 JavaScript 中,bind、call 和 apply 是定义在函数上的方法,它们使我们可以做这样的事,如绑定 this、部分地应用参数、调用具有不同 this 值的函数、调用具有数组参数的函数。


TypeScript 以前并不能严格地检查这些函数,每一个 bind、call 和 apply 都被判定为可以接受任意数量的参数并返回任意类型。先前有两个特性支持准确判断 bind、call 和 apply 的类型所需的抽象:


  • this 参数类型(TypeScript 2.0)

  • 使用元组类型设计参数列表(TypeScript 3.0)


TypeScript 3.2 版本引入了一个新标识 strictBindCallApply,它新增了两个全局类型,用于声明更严格的 bind、call 和 apply 方法签名:


  • CallableFunction——可调用对象上的方法;

  • NewableFunction—— 可构造但不可调用对象上的方法。


在使用复杂的元编程或者类似在类实例内绑定方法这样的简单模式时,TypeScript 团队希望这个特性可以帮助捕获 Bug。


对象扩展和对象截取是 ES2015 中两个应用广泛的特性,大多数 TypeScript 版本都支持,但直到这个版本才提供泛型类型。


对于对象扩展的情况,TypeScript 无法表示从泛型类型返回的类型,因此,就没有机制可以表示两种未知的类型扩展成一个新类型。现在,TypeScript 3.2 提供了面向泛型的对象扩展,使用交集类型设计了这个功能。


对于对象截取的情况,不是使用某些额外/重写的属性创建一个新对象,而是创建一个缺少某些具体属性的新对象。不过,经过深思熟虑,TypeScript 团队认识到,现有的辅助类型 Pick 和 Exclude 提供了在泛型类型上进行对象截取的能力。


BigInt 支持基本完成,有望成为 ES2019 标准的一部分。BigInt 允许处理任意大的整数。TypeScript 3.2 增加了 BigInt 类型检查,并通过 TypeScript 编译目标 esnext 在支持 BigInt 的环境中生成 BigInt 常量。


由于 BigInt 引入了不同的数学运算符行为,TypeScript 团队短时间内不计划对不支持 BigInt 的环境提供向下支持。目前,这意味着 BigInt 支持只对 Node.js 11+、Chrome 67+以及基于类似 Chromium 版本的浏览器有效。Firefox、Safari 和 Edge 都报告说在实现 BigInt 支持。


TypeScript 3.2 的其他改进包括:


  • 允许在联合类型判别式中使用“非单元(non-unit)”类型;

  • 支持 JavaScript 中的 Object.defineProperty 属性赋值;

  • 支持使用–showConfig 把隐含配置对象输出到控制台;

  • 改进列表和链接调用的格式和缩进;

  • 使用 dts-gen 为本地 @types 包搭建脚手架;

  • 添加中间 unknown 类型断言;

  • 添加漏掉的 new 关键字。


要详细了解有关 TypeScript 3.2 版本的所有更改,请查看TypeScript路线图


有关 TypeScript 3.3 的工作已经开始,Partial 类型参数推断是第一个计划加入的特性。这一变化将允许下划线“_”以占位符的形式出现在类型参数列表中,作为要进行类型推断的位置,使用户可以在不显式截取的情况下重写默认列表中的变量,或者允许从另一个类型变量进行类型变量的推断。


在 TypeScript 路线图上,另外一个可能出现在 TypeScript 3.3 中的重要特性是与 ES 装饰器提案的最新变化保持一致。


TypeScript 是一个开源软件,遵循 Apache 2 许可协议。欢迎大家通过TypeScript GitHub项目进行贡献和反馈。如果是贡献,请务必遵守TypeScript贡献指南微软开源代码规范


查看英文原文:


https://www.infoq.com/news/2018/11/typescript-3-2-release-bigint


2018 年 12 月 02 日 13:041521
用户头像

发布了 1008 篇内容, 共 335.1 次阅读, 收获喜欢 314 次。

关注

评论 1 条评论

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

第十周 模块分解作业

简简单单

史上最清晰的Tarjan算法详解

华为云开发者社区

算法 静态分析 语法树 Tarjan 数据流

挖矿区块链_什么是挖矿 带你详细了解挖矿基础知识

v16629866266

持续交付

lidaobing

持续交付 28天写作

第三章:产品解决方案作业

让时间说真话

产品经理

大背景 (28天写作 Day25/28)

mtfelix

28天写作 新能源汽车 新能源革命 碳中和

日记 2021年2月2日(周二)

Changing Lin

个人感悟 2月春节不断更

挖矿系统APP源码搭建

luluhulian

话题讨论|过年回家你带电脑吗?

熊斌

话题讨论 28天写作

时间约束帮助我写作

Justin

方法论 创意 习惯养成 28天写作

云原生动态周报 | Google推出VM Manager

华为云原生团队

Docker 开源 云原生 华为云

第三章:产品解决方案作业

让时间说真话

产品经理

Elasticsearch 写一致性原理

escray

七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

第五周作业

oooh-la

OpenAI将k8s扩展至7500个节点以支持机器学习;Graph Diffusion Network提升交通流量预测精度

京东科技开发者

区块链 开源

ModelArts AI Gallery与HiLens Kit联合开发丨行人社交距离风险提示Demo

华为云开发者社区

华为云 modelarts hilens 行人 社交距离

产品经理训练营第0期-第三次作业

孙行者

第0期 产品经理训练营 问题

前端面试必备ES6全方位总结

我是哪吒

程序员 面试 大前端 ES6 2月春节不断更

不要在nodejs中阻塞event loop

程序那些事

node.js Event 事件循环 程序那些事 nodejs event

【WOW.js】Animate.css的黄金搭档

德育处主任

CSS 动画 js 28天写作 2月春节不断更

安卓开发软件有哪些?分析Android未来几年的发展前景,吐血整理

欢喜学安卓

android 程序员 面试 移动开发

产品训练营第二章作业(二)

Arnold

就算知道了答案,真的会改变吗?「幻想短篇 25/28」

道伟

28天写作

第三章: 产品解决方案作业

让时间说真话

产品经理 产品经理训练营

第十周 学习总结

简简单单

高性能缓存 Caffeine 原理及实战

vivo互联网技术

Java Caffeine 本地缓存

安卓开发交流!一线互联网移动架构师筑基必备技能之Java篇,Android岗

欢喜学安卓

android 程序员 面试 移动开发

厚积薄发!华为云7篇论文被AAAI收录,2021年AI行业技术风向标看这里!

华为云开发者社区

人工智能 卷积网络 远程监督 域泛化 油气储集层收集

传统线程同步通信技术

武哥聊编程

Java 多线程 28天写作

持续进步的不二法宝-PDCA

Ian哥

28天写作

Python 中 sorted 如何自定义比较逻辑

zikcheng

Python sorted cmp

TypeScript发布3.2版本,改进元编程支持、新增BigInt_编程语言_Dylan Schiemann_InfoQ精选文章