Back to all posts

Principles of Clean Code in TypeScript & NestJS

S
sonhp
8 min read

Principles of Clean Code in TypeScript & NestJS

Writing clean code is not just about making code work—it's about making it readable, maintainable, and scalable. NestJS provides a structured framework, but bad coding practices can still make your project hard to maintain.

In this post, we'll explore the fundamental principles of clean code and how to apply them in TypeScript and NestJS.


1. What Makes Code "Clean"?

Clean code is:
Easy to read – Anyone can understand it quickly.
Easy to modify – Making changes doesn’t introduce unexpected bugs.
Easy to test – The code is structured in a way that supports testing.
Consistent – It follows established patterns and best practices.

Bad code, on the other hand, is:
Messy – Hard to read and full of unnecessary complexity.
Tightly coupled – Changes in one part break another.
Full of magic numbers and unclear names.


2. Writing Readable Code

Use Meaningful Names

Avoid generic or ambiguous variable names.

// ❌ Bad Example
const d = new Date();
const p = d.getFullYear();
// ✅ Good Example
const currentDate = new Date();
const currentYear = currentDate.getFullYear();

Write Small, Focused Functions

// ❌ Bad Example (Too Many Responsibilities)
function processUserData(user) {
  console.log('Processing user...');
  validate(user);
  saveToDatabase(user);
  sendEmail(user.email);
}
// ✅ Good Example (Single Responsibility)
function processUserData(user) {
  logProcessing(user);
  validateUser(user);
  saveUser(user);
  sendWelcomeEmail(user.email);
}

3. Keeping Code Maintainable

Separate Concerns Using NestJS Modules

src/
 ├── users/
 │   ├── users.controller.ts
 │   ├── users.service.ts
 │   ├── users.repository.ts
 │   ├── users.module.ts
 ├── auth/
 │   ├── auth.controller.ts
 │   ├── auth.service.ts
 │   ├── auth.module.ts

Use Configuration for Hardcoded Values

const taxRate = this.configService.get<number>('TAX_RATE');
const apiUrl = this.configService.get<string>('API_URL');

4. Following Consistent Code Style

Install ESLint and Prettier:

npm install --save-dev eslint prettier eslint-config-prettier eslint-plugin-prettier

Run linting:

npx eslint .

5. Summary

To write clean and maintainable code in TypeScript & NestJS:
Use meaningful names for variables and functions.
Keep functions short and focused.
Avoid deep nesting for better readability.
Organize code into modules in NestJS.
Use ESLint and Prettier to enforce consistency.

In the next post, we’ll cover how to structure a NestJS project for maintainability.

S

Written by sonhp

Technical writer and developer passionate about web technologies.

Related Articles