首页 > 其他分享 >2022 年要改掉的 10 个 TypeScript 坏习惯

2022 年要改掉的 10 个 TypeScript 坏习惯

时间:2022-09-05 08:22:53浏览次数:88  
标签:10 TypeScript 为什么 代码 检查 2022 类型 应该 我们

2022 年要改掉的 10 个 TypeScript 坏习惯

TypeScript 和 JavaScript 在过去几年中不断进步,我们在过去几十年中建立的一些实践已经过时。有些可能永远没有意义。下面列出了我们都应该改掉的 10 个习惯。

1.不要使用严格模式

它看起来像什么

通过使用没有严格模式的 tsconfig.json。

它应该是什么样子

使用严格模式后。

我们为什么这样做

在代码库中引入更严格的规则通常需要时间。

为什么我们不应该

更严格的规则可以在未来更容易地更改代码,因此修复代码所花费的时间会被退回,之后在未来处理存储库时会花费一些时间。

2. 用 || 确定默认值

它看起来像什么

与||转身对于可选值:

它应该是什么样子

去买新的??运算符,或者更好的是,在参数级别定义折返权。

我们为什么这样做

这 ??运算符去年才被引入,如果在长函数的中间使用值,可能很难将它们定义为参数默认值。

为什么我们不应该

?? 与 || 不同,它只返回 null 或 undefined,而不是所有 falsy 值。此外,如果您的函数很长以至于您无法在一开始就定义默认值,那么将它们分开可能是个好主意。

3.使用any作为类型

它看起来像什么

当我们不确定结构时,应该使用任何类型的数据。

它应该是什么样子

在几乎所有我们键入任何内容的情况下,我们都应该将其键入为未知。

我们为什么这样做

any 很简单,因为它从根本上禁用了所有类型检查。通常,即使在官方类型中也使用 any(例如,上面示例中的 response.json() 被键入为 Promise由 TypeScript 团队提供)。

为什么我们不应该

它从根本上禁用所有类型检查。通过 any 进入的所有内容都将完全放弃任何类型检查。这可能会变得非常难以捕捉错误,因为只有当我们对类型结构的假设符合运行时代码时,代码才会失败。

4. val 作为 SomeType

它看起来像什么

强制告诉编译器它无法推断的类型。

它应该是什么样子

这就是类型守卫的用途。

我们为什么这样做

当我们想要从 JavaScript 转换为 TypeScript 时,现有的代码库经常对 TypeScript 编译器无法自动得出的类型做出假设。在这些情况下,使用快速 as SomeOtherType 可以加快转换速度,而无需放松 tsconfig 中的设置。

为什么我们不应该

即使现在可以保存断言,但当有人移动代码时,这可能会改变。类型保护将确保所有检查都是明确的。

5. 和任何测试一样

它看起来像什么

在编写测试时,它会创建不完整的替身。

它应该是什么样子

如果您需要为您的测试模拟数据,请将模拟逻辑移动到您模拟的事物旁边并使其可重用。

我们为什么这样做

虽然在尚未有很好的测试覆盖率的代码库中编写测试时,经常会出现复杂的大数据结构,但测试中的特定功能只需要其中的一部分。短期内无需担心其他属性更简单。

为什么我们不应该

放弃模拟的开发会咬我们一口,最近一次是当其中一个属性发生变化时,我们必须在所有测试中更改它而不是一个中心位置。此外,在某些情况下,被测代码依赖于我们之前认为不重要的属性,然后必须更新该功能的所有测试。

6. 可选属性

它看起来像什么

将属性定义为有时存在有时不存在的可选属性。

它应该是什么样子

清楚地表达,模型哪些组合存在,哪些不存在。

我们为什么这样做

将属性定义为可选而不是划分类型更容易并且生成的代码更少。它还需要对正在开发的产品有充分的了解,并且可以在对产品的假设发生变化时限制代码的使用。

为什么我们不应该

类型系统的最大好处是它们可以用编译时检查代替运行时检查。使用更快速的类型,可以在编译时检查可能会被忽视的错误,例如通过确保每个 DigitalProduct 都有一个 sizeInMb。

7. 一个字母泛型

它看起来像什么

用一个字母给名称一个通用名称

它应该是什么样子

应该给出一个完整的描述性类型名称。

我们为什么这样做

我猜这种习惯会养成,因为即使是官方文档也使用一个字母的名称。按 T​​ 代替写全名可以更快地键入,并且不需要考虑太多。

为什么我们不应该

泛型类型变量是变量,就像其他变量一样。当 IDE 开始向我们展示这些技术性时,我们已经放弃了在变量名称中描述变量技术性的想法。例如。我们通常只写 const name = 'Daniel' 而不是 const strName = 'Daniel'。此外,一个字母的变量名称通常会让人大吃一惊,因为如果不查看它们的声明,可能很难翻译它们的含义。

8.非布尔布尔检查

它看起来像什么

通过将值直接传递给 if 语句来检查值是否已定义。

它应该是什么样子

我们可以明确检查我们关心的情况。

我们为什么这样做

用简短的方式编写检查看起来更简洁,并且可以让我们避免思考我们真正想要检查的内容。

为什么我们不应该

也许我们应该考虑一下我们真正想要检查的内容。例如,上面给出的示例以不同的方式处理 countOfNewMessages 为 0 的情况。

9. Bang Bang 算子

它看起来像什么

将非布尔值转换为布尔值。

它应该是什么样子

明确检查我们关心的状况。

我们为什么这样做

对我们中的一些人来说,理解!就像开始对 JavaScript 宇宙的仪式一样。它看起来简短而简洁,如果您已经熟悉它,那么您就会知道它是关于什么的。这是将任何值转换为布尔值的简便方法。尤其是在代码库中,如果 null、undefined 和 '' 等虚假值之间没有明确的语义分离。

为什么我们不应该

像许多捷径和启动仪式一样,使用 !!通过宣传内部知识来混淆代码的真正含义。这使得新开发人员更不容易访问代码库,无论是一般开发的新手,还是 JavaScript 的新手。引入细微的错误也很容易。来自“非布尔布尔检查”的 countOfNewMessages 为 0 的问题仍然存在 !!。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/15338/18410508

标签:10,TypeScript,为什么,代码,检查,2022,类型,应该,我们
From: https://www.cnblogs.com/amboke/p/16656782.html

相关文章

  • 2022年JDK安装(Java安装)详细教程(window)
    ​ 目录一、下载1、下载二、安装1、jdk安装2、jre安装三、检测 一、下载1、下载链接:https://pan.baidu.com/s/1x9xh93LvjqfaPqbByRhgqA提取码:6bso--来自百......
  • 2022年anaconda安装超详细
    ​ 目录一、下载1、下载anaconda二、安装2、选择路径3、添加环境变量4、测试 一、下载1、下载anaconda链接:https://pan.baidu.com/s/1xX6F_WMcehUlSqgLAcP......
  • 2022年油猴(tampermonkey)超简单安装
    ​ 1、下载链接:https://pan.baidu.com/s/1_JTua9tlGBzJGqopZnstIg提取码:jef6--来自百度网盘超级会员V4的分享2、安装(1)解压​编辑(2访问chrome://extensions/访......
  • 2022年sublime安装教程超简单
    ​ SublimeText是一款用于代码、标记和散文的精致文本编辑器。对于我这种写python的新手小白非常友好一、下载链接:https://pan.baidu.com/s/10Gzdwntxjox8UWC-OJjlwg......
  • 2022年vscode安装教程(小白专用)
    ​ 目录1、下载2、安装路径3、相关配置4、中文配置 1、下载链接:https://pan.baidu.com/s/1v7cGcvcQX8U64brZBoTQzQ提取码:85a1--来自百度网盘超级会员V4的分享2......
  • 2022年MinGW-w64的安装及配置教程(傻瓜式)
    1、下载:链接:https://pan.baidu.com/s/1-JhvI-x_KqxYOdWRB2C1rg提取码:scd1--来自百度网盘超级会员V4的分享2、解压1、解压到自己想要的目录(最好不要有中文路径),并复制文......
  • 您应该查看的 10 个优秀的关于页面示例
    您应该查看的10个优秀的关于页面示例NEOM研究表明,关于页面是新用户希望看到的第一个页面之一,因为关于页面显示了新用户希望看到的网站背后公司的更多详细信息。我们......
  • 2022 年全栈 Web 开发路线图
    2022年全栈Web开发路线图大家好!在今天的这篇文章中,我们将看看如何在2022年成为一名全栈Web开发人员。前端Web开发人员与前端一起工作,即通过使用HTML、CSS和......
  • stm32f103zet红牛开发板STMcubeMX hal库版:03旺宝-红牛-蜂鸣器 SysTick应ongoi
    程序运行后,蜂鸣器发出类似报警声.蜂鸣器在  pb2上接着。这是一个无源蜂鸣器。不是给电就响。得给一定频率的信号才行。这里用定时器跟gpio生成一定频率的方波。  ......
  • 使用 Node.js 构建基于 Typescript 的命令行界面 (CLI)
    使用Node.js构建基于Typescript的命令行界面(CLI)我们的目标是使用Typescript创建一个基于Node.js的命令行界面(CLI)。此设置包括顶级等待支持和ES模块导入。......