TypeScript 3.7如何提高质量

在本文中,我将介绍最近发布的TypeScript 3.7的一些关键要点。我将通过它们如何影响软件和代码质量的角度来研究这些问题,因为让我们面对现实吧–这就是我的难题。

我已经关注TypeScript版本已有一段时间了。我已经看到了最后的来来去去,并没有对我的日常生活产生重大影响的任何事物。 3.7这样的次要版本听起来并不重要,但它在提高代码质量方面意义非凡。

尽管TypeScript 3.7包含许多令人惊讶的内容,但我将专门针对以下更改进行撰写:

  • 可选链接
  • 空位合并
  • 断言功能
  • 声明关键字
  • 未调用的功能检查

让我们开始吧。

可选链接

可选链接是一种语法形式,用于在某些内容为空或未定义的情况下进行短路评估。

TypeScript引入了 ?. 运算符,以在对象存在的情况下有选择地调用某些内容。

请看下面新旧做事方式之间的比较:

在.NET世界中的C#中,我们已经有可选的链接,这是我的忠实粉丝。

我喜欢这个是:

  • 它使语法简直难以置信,但可读性强
  • 它使检查空值变得容易

这两件事对代码和软件质量都有很大帮助。如果我正在检查代码,并且不会因if块的额外语法而分心,则可以专注于真正重要的代码。

同样,如果我是开发方法的开发人员,而该方法的使用时间超出了应有的时间,那么我可能会变得懒惰,并假设已经对变量进行了null检查。这听起来很愚蠢,但我感到自己很想被淘汰,不想走上前去添加一个空支票。

能够快速有条件地检查null是否会比最初想象的更多地帮助提高质量。

空位合并

空位合并是指使用 ?? 操作员评估可能为空或未定义的事物。

首先,“ nullish”一词让我发笑,因为它非常适合JavaScript概念。

JavaScript需要这种区别,因为它具有以下概念: null 与…分开但与之相关 undefined。当然,区别是 null 显然只是什么 undefined 实际上没有被定义为具有任何值。我想动态语言的危险。

例如,空合并的代码片段之前和之后的内容如下:

如您所见,与三元(?)等价的运算符(如果检查分配情况)。

我喜欢的东西与我喜欢的可选链接的东西相似–它可以帮助您专注于真正重要的代码。

如果我们作为工程师可以消除代码和语法中的额外噪音,那么我们将更容易,更早地发现缺陷。

断言功能

断言功能我更担心。从本质上讲,它们是函数,如果没有错误调用,它们就会对TypeScript的内部类型解释代码进行断言。反过来,这又使编译器可以根据现在证明是正确的事实来捕获更多特定问题。

让我们看一个例子:

这里我们有一个 getStandardFixedNumberString 该函数接受一个已知为 string 或一个 number。以来 toFixed 不适用于 string 类型,通常不允许使用此代码。

assertIsNumber 函数定义了一个断言子句,该子句实质上说“如果没有出错,则函数断言为真,并且对于方法的其余部分可以理解”。

由于我们断言输入是数字,因此在这种情况下,可用于数字的函数将变为可用,因此TypeScript在我们的计算机上没有问题 toFixed 呼叫。

因此,这就是我要讨论的地方:如果您的方法足够长,需要断言函数,则应该将其拆分为较小的方法。

您可能会说断言函数是一种让TypeScript进行运行时类型检查的方法,而不是仅在编译时进行标准静态检查的一种方法。

但是,我不认为TypeScript可以通过在运行时强制执行规则而蓬勃发展。我认为,我们应该在编译时强制输入,然后在边缘验证系统的外部输入。应该声明并强制转换诸如API调用和用户输入之类的内容,而不是主应用程序代码。

尽管如此,断言功能还是需要考虑和注意的,因为它们可能会为将来的其他用途服务。

声明关键字

声明使我们可以将动态类型系统与继承结合起来,从本质上重新声明继承的属性。

看一下下面的简单层次结构:

这里我们有一个 DarkTheme 继承自 ThemeTheme 声明一个集合 Person 实体,它本身是一种抽象。

因为我们知道所有使用深色主题的人都很棒,所以我们知道 users 财产也只有 AwesomePerson 实体。

使用TypeScript 3.7,TypeScript也可以理解这一点。

我们使用 declare 关键字,用于告诉TypeScript对某事进行假设,而不会对此假设发出任何特殊要求。以前我用过 declare 引用诸如在共享网页上加载的外部库之类的内容。

在这里我们正在使用 declare 以指定该属性在该上下文中的类型与先前定义的类型不同。

我真的很喜欢这个功能。尽管不像其他语言功能那样常用,但这可以帮助复杂的层次结构团队了解其属性,而无需进行类型声明。

未调用的功能检查

最后,TypeScript现在将捕获我们经常在函数中犯的一个常见错误。看下面的代码:

在这里我们打算调用 person.onlyDoesBoringThings 在第10行,但忘记了 ()的,而是根据null / undefined对函数进行评估。定义函数,以便条件评估为 true 即使调用也会返回 fasle

TypeScript 3.7开箱即用地捕获了此错误:

这项简单的内置检查程序可以提高质量,而无需执行其他任何步骤,因此我全力以赴。

TypeScript 3.7的后续步骤

如果您想了解有关这些功能或TypeScript的其他改进的更多信息,请查看完整的发行说明。

您可以通过运行以下命令通过npm更新到TypeScript 3.7 npm update -g typescript

如果您尚未开始使用TypeScript,请参阅我的文章,将现有的JavaScript代码迁移到TypeScript。

您如何看待这些变化?您最兴奋的是什么?您是否有充分的理由使用我没想到的断言函数?

《如何杀死所有缺陷》一文首先介绍了TypeScript 3.7如何帮助质量。

资讯来源:由0x资讯编译自DEV,原文:https://dev.to/integerman/how-typescript-3-7-helps-quality-33jn ,版权归作者所有,未经许可,不得转载
你可能还喜欢