发布于 2026-01-05 4 阅读
0

编写简洁代码的 7 个技巧

编写简洁代码的 7 个技巧

关键在于保持代码的简洁性和可读性(当然,这本身就很重要)。所以,我想和大家分享一些技巧。欢迎在评论区指正或分享你们自己的技巧,让我们共同学习。那么,让我们开始吧:

1. 评论、评论,还有更多评论

我不是那种代码人人都能看懂的理想开发者,我猜你也不是。与其解释具体该怎么做,不如我来告诉你哪些事情不该做。我们来看一些示例代码:

// Created a constant variable "foo" and assigned a value of "bar"
const foo = "bar";
Enter fullscreen mode Exit fullscreen mode

2. 有意义的名字

你希望使用那种读者会说“是的!我完全明白这是做什么的”的名称。

// NEVER DO THIS
const abc = validateEmail('writecleancode@gmail.com')

// Good Job!
const isEmailValidated = validateEmail('writecleancode@gmail.com');
Enter fullscreen mode Exit fullscreen mode

3. 控制台警告/错误

这是一个非常严重的问题,我多次看到开发者提交的代码存在 ESLint 警告。事实上,几个月前,我开始参与一个现有项目。编译前端时,我发现 jsx-ally、eslint 等工具发出了超过 100 个警告。

我们可以使用husky​​lint-staged,这样在你清除所有警告和错误之前,就不会允许你提交代码。

4.as unknown在 TypeScript 中

TypeScript 很智能,但有时它还不够智能!我在 TypeScript 代码中见过很多// @ts-ignore`s` 或as unknown`s`。所以,与其这样做:

const user = dog as unknown;
Enter fullscreen mode Exit fullscreen mode

这样做:

const user dog as IUser
Enter fullscreen mode Exit fullscreen mode

虽然这样做并不可取,但至少能获得一定的安全保障。

5. 使用 Babel 代替 tsc

从版本 7 开始,Babel 增加了对 TypeScript 的支持,这意味着你不再需要使用 TypeScript 编译器来tsc构建你的项目,而是可以直接使用 Babel,它会从所有 TypeScript 文件中提取类型,然后将结果作为 JavaScript 输出。

这不仅比 tsc 快得多,尤其是在大型项目中,而且还允许你在项目中使用整个 Babel 生态系统。例如,当你想要使用仍处于 Stage 3 阶段的 React 或 JavaScript 功能时,它就非常有用。

对于后端项目而言,这意味着您可以简化笨拙的文件监视脚本,只需使用 babel-node 来监视更改即可。

6. 使用 SonarJS 和 ESLint

ESLint 有许多规则可以强制执行最佳实践和约定,并且还有助于防止错误。

(TSLint 正在被弃用,取而代之的是 typescript-eslint;TSLint 插件 SonarTS 已被采用,现在是 SonarJS 的一部分)。

除了 ESLint 的功能之外,SonarJS 还为您的代码添加了一些复杂性检查,这有助于您编写代码,然后将方法拆分成更小的部分。

7. 不透明类型

我不打算解释,直接演示给你看。

假设我们正在构建一个银行API。

// Account.ts

export type PaymentAmt = number;
export type Balance = number;
export type AccountNumberType = number;

function spend(accountNo: AccountNumberType, amount: PaymentAmt) {
  const account = getAccount(accountNo);
  account.balance -= amount;
}
Enter fullscreen mode Exit fullscreen mode
// controller.ts
import {spend} from "./accounting";

type Request = {
  body: {
    accountNumber: number,
    amount: number
  }
};

export function withdrawAmt(req: Request) {
  const {accountNumber, amount} = req.body;

  spend(amount, accountNumber);
}
Enter fullscreen mode Exit fullscreen mode

你发现 bug 了吗?如果没有,请检查我们调用spend()函数的地方。我(故意)把金额放在了账号之前,但 TypeScript 没有报错。

如果你想知道为什么会发生这种情况,这是因为AccountNumberTypePaymentAmt可以相互赋值,因为它们都是 类型number

TypeScript 代码库中长期存在这个问题。在 TypeScript 团队解决这个问题之前,我们可以使用以下临时解决方案。

// Can be used with any type
type Opaque<K, T> = T & { __TYPE__: K };

type Uuid = Opaque<"Uuid", string>;
Enter fullscreen mode Exit fullscreen mode

实用函数 Opaque 定义了一种新类型,除了变量的值之外,它还存储一个(唯一的)键,例如 Uuid。

结论

感谢阅读!欢迎关注我的推特,我(尽量)每天都会分享一些小技巧。拜拜🤟

文章来源:https://dev.to/akashshyam/7-tips-for-clean-code-3nk1