关山难越,谁悲失路之人;萍水相逢,尽是他乡之客。
百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程教程 > 技术文章 > 正文

「翻译」TypeScript 3.9 中的新特性

guanshanw 2023-09-29 21:42 14 浏览 0 评论

原文地址: https://medium.com/better-programming/whats-new-in-typescript-3-9-70e3d2eabe26/

译文地址:https://github.com/xiao-T/note/blob/master/Published/typescript/What%E2%80%99s-New-in-TypeScript-3.9.md

本文版权归原作者所有,翻译仅用于学习。


5 月 12 号 TypeScript 发布了今年的第二个版本 v3.9。这是一个稳定版本。这篇文章,我将会介绍 v3.9 中引入的新功能。

@ts-expect-error

我们先看以下的示例,我们定义了一个有两个字符串参数的函数。

printName(firstName: string, lastName: string) { 

    console.log(firstName);

    console.log(lastName);

    assert(typeof firstName === "string");   

    assert(typeof lastName === "string");

}

通常,如果,TypeScript 用户错误的使用这个函数,他们会得到一个非常有用的错误提示信息,然而,JavaScript 用户将会得到一个断言错误信息。但是,如果我们为这个函数编写测试用例会发生什么呢?

expect(() => { 

   printName(1234, 5678); 

}).toThrow();

如果,我们的测试用 TS 语法,将会抛出以下的错误信息:

printName(1234, 5678);

// ~~~ 

// error: Type ‘number’ is not assignable to type ‘string’.

为了解决这种问题,TypeScript 3.9 引入了新的功能:// @ts-expect-error 注释。如果,我们把这个注释放在代码行前面,TypeScript 就会忽略这个错误。但是,如果没有错误,TypeScript 就会提示代码中有不必要的注释,比如:Unused '@ts-expect-error' directive

我们还可以把 // @ts-expect-error 作为抑制注释使用。// @ts-ignore 是一个早已存在的抑制注释。两者之间的区别是:// @ts-ignore 在接下来的代码行中没有错误会提示

(译者注:两者之间的区别是:两者都会忽略接下来代码行中的错误,只是在没有错误的情况下 // @ts-ignore 不会提示:有不必要的注释)

速度提升


TypeScript 早期版本中使用类似 Material-UI 这种库存在很多的编译速度问题。

新版本中,TypeScript 开发团队针对这类问题优化了大型联合、交叉、条件和映射类型,为 Material-UI 的编译节省了 40% 的时间。同时,他们还致力于有关 Visual Studio Code 等编辑器的文件重命名功能。

自动引入 CommonJS 模块

之前的版本,TypeScript 不管文件是什么类型只能引入 ECMAScript-style 的文件。但是,很多开发者还是使用 CommonJS-style require(),而没有使用 ECMAScript-style 的导入功能。

ECMAScript style:

import * as fs from "fs";

CommonJS style:

const fs = require("fs");

最新版本中,TypeScript 会自动检测导入的类型用于保证代码的整洁。

改善类型推断和 Promise.all

TypeScript v3.7 中更新了 Promise.all 和 Promise.race 的声明。但是,这次更新也带来了一些问题,因为,在同 null 或者 undefined 混合使用时会引起编译报错。下面通过示例演示一下:

interface Bird{ 

   fly(): void 

} 

interface Fish{ 

   singKissFromARose(): void 

} 

async function animalBehaviours(birdBehaviour: Promise<Bird>,     fishBehaviour: Promise<Fish| undefined>) { 

   let [bird, fish] = await Promise.all([birdBehaviour,    fishBehaviour]); 

   bird.fly();

   // ~~~~ 

   // Object is possibly ‘undefined’. 

}

尽管,fishBehaviour 可能是 undefined,但是,还是会影响到 birdBehaviour。这种问题在 v3.9 中修复了。

代码重构保留空白行



很多开发者喜欢在每个功能代码块之间保留空白行,但是,早期的 TypeScript 代码重构不会保留空白行。它会移除所有的空白行。最新版本中,TypeScript 已经修复了这种问题,代码重构后会保留空白行。

(译者注:这个地方的提到的代码重构是指一些 IDE 附带的一些代码重构功能,比如:VS Code https://code.visualstudio.com/docs/editor/refactoring)

快速修复缺失的 return 语句

有时候,我们会忘记在函数结束时返回对应的值。现在,TypeScript 提供快速修复的方案,自动添加 return 语句。

在条件语句中检查未调用的函数

在 v3.7 之后,TypeScript 会检查 `if` 语句中未调用的函数并提示错误。在 v3.9 中,这一功能也支持三元运算符了。

其它的改变

相比以上的改变,还有一些微不足道的改变

  • 在 JSX 中 } 和 > 被认为无效
  • export * 被保留
  • Getter 和 Setter 不在可枚举
  • Type parameters which extend any are no longer acting as any
  • libdom.d.ts 的改进

总的来说,这些改变在最新版本中都可以看到。因此,如果你喜欢 TypeScript,保持更新到最新的版本,可以让编写代码更高效。

相关推荐

七条简单命令让您玩转Git
七条简单命令让您玩转Git

凭借着出色的协作能力、快速部署效果与代码构建辅助作用,Git已经得到越来越多企业用户的青睐。除了用于开发商业及消费级应用之外,众多科学及政府机构也开始尝试使用这...

2023-10-07 12:14 guanshanw

基本完整的关于Git分支branch的操作
基本完整的关于Git分支branch的操作

Git使用背景项目中要用到dev或者其他分支开发完代码,需要将该分支合并到master的需求操作步骤下面以dev名称为lex为分支名为例来操作一遍客户端操作:...

2023-10-07 12:14 guanshanw

Git 进阶(合并与变基)
Git 进阶(合并与变基)

在Git中整合来自不同分支的修改主要有两种方法:合并(merge)以及变基(rebase)合并(merge)merge流程图merge的原理是找到这两个分...

2023-10-07 12:13 guanshanw

Git学习笔记 003 Git进阶功能 part5 合并(第一部分)

合并(merge)是很常用的操作。尤其是一个庞大的很多人参与开发的企业级应用。一般会设定一个主分支,和多个副分支。在副分支开发完成后,合并到主分支中。始终保持主分支是一个完整的,稳定的最新状态的分支。...

非标题党,三张图帮你理解git merge和git rebase的区别
非标题党,三张图帮你理解git merge和git rebase的区别

初始场景:基于正常的开发分支修改几个小bug,然后在合并到开发分支上。gitmergegitcheckoutfeaturegitmergeho...

2023-10-07 12:13 guanshanw

git 初次使用(01)
git 初次使用(01)

先从github上克隆代码下来:使用vscode克隆代码如下图,填写上github仓库地址:vscode有时候克隆代码速度比较慢,可以用命令行方式克隆gitc...

2023-10-07 12:12 guanshanw

Git 远程操作

4.Git远程操作命令说明gitremote远程版本库操作gitfetch从远程获取版本库gitpull下载远程代码并合并gitpush上传远程代码并合并4.1远程版本库操作gitre...

Git常用命令-总结
Git常用命令-总结

创建git用户$gitconfig--globaluser.name"YourName"$gitconfig--globaluser.em...

2023-10-07 12:12 guanshanw

git中删除从别人clone下来项目的git信息,并修改为自己的分支

如果你从别人的Git存储库中克隆了一个项目,并想要删除与该存储库相关的Git信息,并将其修改为你自己的分支,则可以执行以下步骤:使用gitclone命令克隆存储库:gitclone<u...

git系列-回滚和放弃本地修改

回滚历史提交就是reset的功能。这种情况是已经提交远程仓库,需要回滚到之前的提交。gitreset--hardcommitId//注:强制提交后,当前版本后面的提交版本将会删掉!gi...

GIT使用小技巧大全
GIT使用小技巧大全

在大型软件工程的开发过程中,版本控制是无法绕过去的;目前来说,最火的版本控制软件就是GIT了。早两年SVN比较火,不过被大神linus喷了几次后,就日落西山了,...

2023-10-07 12:11 guanshanw

git相关命令-上
git相关命令-上

这些命令都是看了文档后,个人觉得比较有用的一些,展示给大家。回到远程仓库的状态抛弃本地所有的修改,回到远程仓库的状态。gitfetch--all&...

2023-10-07 12:10 guanshanw

Git命令行接口:掌握Git的必备技能
Git命令行接口:掌握Git的必备技能

Git是一款强大的分布式版本控制工具,它支持命令行界面操作。熟练掌握Git命令行接口,是开发者使用Git的必备技能之一。在这篇文章中,我们将介绍Git命令行接口...

2023-10-07 12:10 guanshanw

Git命令详解
Git命令详解

相信各位小伙伴们应该都对git有一些了解,毕竟作为代码管理的神器,就算不是IT行业的小伙伴肯定也或多或少的听说过一些。今天就来和小伙伴们分享一下自己总结的常用命...

2023-10-07 12:10 guanshanw

工作7年收集到的git命令
工作7年收集到的git命令

概念git中的术语解释:仓库也叫版本库(repository)stage:暂存区,add后会存到暂存区,commit后提交到版本库git安装linux...

2023-10-07 12:10 guanshanw

取消回复欢迎 发表评论: