TypeScript 中的 Clean Code:面向开发者的原则与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

TypeScript 中的 Clean Code:原则与示例



在现代 Web 开发中,TypeScript 已成为创建大型可靠应用的事实标准。然而,TypeScript 本身并不能保证代码质量。为了让项目保持灵活、清晰且易于维护,必须遵循 Clean Code 原则。在本文中,我们将通过直观的示例,解析 TypeScript 中整洁代码的核心概念。您将学习如何编写不仅让编译器满意,也让同事赏心悦目的代码。



为什么 Clean Code 对 TypeScript 很重要?



TypeScript 为 JavaScript 增加了静态类型检查,这已经有助于避免许多错误。但类型仅仅是一种工具。如果没有深思熟虑的架构和可读的编码风格,代码仍然会变成“意大利面条式代码”。Clean Code 是一种理念,它使代码具备:

  • 可读性 — 任何开发者都能快速理解逻辑。
  • 可维护性 — 修改一处不会破坏整个应用。
  • 可扩展性 — 添加新功能无需重写半个项目。

在 TypeScript 中应用这些原则,可以充分利用类型系统的强大功能,创建自文档化的代码。



原则 1:变量和函数的命名



好的命名是成功的一半。名称应该回答“是什么?”和“为什么?”,而不是“怎么做?”。避免使用只有你自己能理解的单字母变量和缩写。



糟糕的示例:

// d 是什么?y 呢?const d = new Date();const y = d.getFullYear();const fn = (a: number, b: number) => a + b;


良好的示例:

const currentDate = new Date();const currentYear = currentDate.getFullYear();

const sum = (firstNumber: number, secondNumber: number): number => { return firstNumber + secondNumber;};


建议: 使用有意义的名称。对于布尔值,使用前缀 is、has、should。例如:isActive、hasPermission。



原则 2:函数应该短小且只做一件事



一个函数不应该同时负责多个任务。如果函数做了不止一件事——就应该拆分它。这能提高复用性并简化测试。



糟糕的示例(函数一次性完成所有操作):

function processUserData(user: any) {    // 验证    if (!user.email || !user.name) {        throw new Error('Invalid user');    }    // 格式化    const formattedUser = {        fullName: user.name.toUpperCase(),        emailDomain: user.email.split('@')[1]    };    // 保存到数据库    database.save(formattedUser);    // 发送邮件    emailService.sendWelcomeEmail(formattedUser);}


良好的示例(职责分离):

function validateUser(user: User): void {    if (!user.email || !user.name) {        throw new Error('Invalid user data');    }}

function formatUser(user: User): FormattedUser { return { fullName: user.name.toUpperCase(), emailDomain: user.email.split('@')[1] };}

async function processUserData(user: User): Promise<void> { validateUser(user); const formattedUser = formatUser(user); await database.save(formattedUser); await emailService.sendWelcomeEmail(formattedUser);}


现在每个函数都有一个明确的目标,并且可以轻松地单独测试。



原则 3:使用类型和接口实现自文档化



TypeScript 提供了强大的工具来描述数据。不要滥用 any 类型——它会抹杀静态类型检查的所有好处。定义接口

博客

书籍推荐