Back to Blog
TypeScript

TypeScript Tips for Better Code Quality

October 5, 2024
6 min read

TypeScript adds static typing to JavaScript, helping you catch errors early and write more maintainable code. Here are essential tips to improve your TypeScript skills.

## 1. Use Type Inference

Let TypeScript infer types when possible:

```typescript
// Good - Type is inferred
const message = "Hello, World!"

// Unnecessary - Explicit type not needed
const message: string = "Hello, World!"
```

## 2. Leverage Union Types

Union types allow a value to be one of several types:

```typescript
type Status = 'pending' | 'success' | 'error'

function handleStatus(status: Status) {
// TypeScript knows status can only be one of three values
}
```

## 3. Use Interfaces for Objects

Define object shapes with interfaces:

```typescript
interface User {
id: number
name: string
email: string
}

function greetUser(user: User) {
console.log(`Hello, ${user.name}!`)
}
```

## 4. Enable Strict Mode

Always use strict mode in your tsconfig.json:

```json
{
"compilerOptions": {
"strict": true
}
}
```

## 5. Use Utility Types

TypeScript provides helpful utility types:

```typescript
// Partial - Make all properties optional
type PartialUser = Partial

// Pick - Select specific properties
type UserPreview = Pick

// Omit - Exclude specific properties
type UserWithoutEmail = Omit
```

## 6. Generic Functions

Write reusable code with generics:

```typescript
function getFirstElement(arr: T[]): T | undefined {
return arr[0]
}

const firstNumber = getFirstElement([1, 2, 3]) // Type: number
const firstString = getFirstElement(['a', 'b']) // Type: string
```

## Best Practices

1. **Don't use `any`** - It defeats the purpose of TypeScript
2. **Use `unknown` instead of `any`** - When you truly don't know the type
3. **Leverage type guards** - Narrow types safely
4. **Document complex types** - Use JSDoc comments

## Conclusion

TypeScript significantly improves code quality and developer experience. These tips will help you write better, more maintainable TypeScript code.