时间:2021-05-26
更新什么?概况一览
1、优化了 Promise.all 的定义,在 3.7 版本中一些混用 null 或 undefined 的时候的问题已经在 3.9 得到了修复。
2、大大的提高了打包速度,微软团队自测的时候 typescript项目的平均编译时间由 26s 缩短到了 10s 左右。
3、// @ts-expect-error 新注释的添加
4、在条件语句中检测未调用的函数
5、编辑器提升
6、一些重大变化
主要是在 TypeScript 定义和书写规范上的改动和修复以前的 bugs
挑几个重点的写一下
1、interface 的优化和 promise.all 使用修复
我们知道在 3.7 版本后面对 promise.all & promise.race 等方法做出了更新,但是也制造出了一个问题。在使用 null & undefined 尤其明显。
nterface Lion { roar(): void}interface Seal { singKissFromARose(): void}async function visitZoo(lionExhibit: Promise<Lion>, sealExhibit: Promise<Seal | undefined>) { let [lion, seal] = await Promise.all([lionExhibit, sealExhibit]); lion.roar(); // uh oh// ~~~~// Object is possibly 'undefined'.}这种行为就很奇怪了,实际上 sealExhibit 当中包含的 undefined,相当于是把 undefined 错误引入了 lion type 当中, 这里是一个错误引用。
当然在最新的 3.9 版本中修复了这个问题。
1.1 全新的 awaited type
awaited type 主要是对现在的 promise 更好的定义和使用。
预计在 **`3.9`** 发布的,结果微软又跳票了,可以等下一个版本了。
2、TypeScript 打包编译等速度提升
这里主要是优化了几个微软的内部项目的性能优化,比如:
详情可以看看下面这几个 pull request 的具体优化内容
https://github.com/microsoft/TypeScript/pull/36576
https://github.com/microsoft/TypeScript/pull/36590
https://github.com/microsoft/TypeScript/pull/36607
https://github.com/microsoft/TypeScript/pull/36622
https://github.com/microsoft/TypeScript/pull/36754
https://github.com/microsoft/TypeScript/pull/36696
4、在条件语句中检测未调用的函数
在 3.7 的时候引入了检测未调用函数错误提示,3.9 做了部分优化
function hasImportantPermissions(): boolean { // ...}// Oops!if (hasImportantPermissions) {// ~~~~~~~~~~~~~~~~~~~~~~~// This condition will always return true since the function is always defined.// Did you mean to call it instead? deleteAllTheImportantFiles();}但是,此错误仅适用于if语句中的条件。现在三元条件(即语法)现在也支持此功能。比如 cond ? trueExpr : falseExpr
5、编辑器的提升
5.1 CommonJS 的自动补全
新版本的另一项重大改进,是使用 CommonJS 模块自动导入 JavaScript 文件。
在旧版本中,TypeScript 强制要求用户无论使用什么文件,都必须以 ECMAScript 的形式导入,例如:
但在编写 JavaScript 文件时,很多用户并不打算使用 ECMScript 样式模块。不少朋友仍在使用 CommonJS 样式的 require(...) 导入,例如:
const fs = require("fs");TypeScript 现在能够自动检测您所使用的导入类型,保证文件样式简洁而统一。现在有了如下自动引入的功能
5.2 缺失的函数返回值的自动修复功能
在某些情况下,我们可能会忘记返回函数中的最后一条语句的值,尤其是在向箭头函数添加大括号时。
// beforelet f1 = () => 42// oops - not the same!let f2 = () => { 42 }6、重大改进!
6.1 解析可选链与非 null 断言中的差异
ypeScript 最近实现了对可选链操作符的支持,但根据广大使用者的反馈,非 null 断言操作符(!)的可选链(?.)行为不符合直觉。
具体来讲,在以往的版本中,代码:
被解释为等效于以下 JavaScript 代码:
在以上代码中,括号会阻止可选链的“短路”行为;因此如果未定义 foo 为 undefined,则访问 baz 会引发运行时错误。
换句话说,大多数人认为以上原始代码片段应该被解释为在:
中,当 foo 为 undefined 时,计算结果为 undefined。
这是一项重大变化,但我们认为大部分代码在编写时都是为了考虑新的解释场景。如果您希望继续使用旧有行为,则可在!操作符左侧添加括号,如下所示:
参考
https://www.typescriptlang.org/docs/home.html
到此这篇关于Typescript3.9 常用新特性一览(推荐)的文章就介绍到这了,更多相关Typescript3.9 新特性内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Vue2.5LevelE发布了:新功能特性一览近日,Vuev2.5发布,除了对TypeScript的更好的支持外,还有一些功能和语法的调整,你需要了解。本文,不
linux和windows的区别linux优缺点一览linux和windows的区别linux优缺点一览linux和windows的区别linux优缺点一览li
linux和windows的区别linux优缺点一览linux和windows的区别linux优缺点一览linux和windows的区别linux优缺点一览li
iPhone所有型号上市顺序iPhone历史机型一览iPhone所有型号上市顺序iPhone历史机型一览iPhone6sPlus。iPhone7Plus发布。i
iPhoneXR国行版多少钱?iPhoneXR国行版值得买吗?下面小编带来国行版苹果XR价格及配置一览,希望对大家有所帮助。国行版苹果XR价格及配置一览:今天凌