Мастерство TypeScript: Продвинутые техники и паттерны

2 min read
TypeScriptПрограммированиеВеб-разработка

Мастерство TypeScript

TypeScript стал стандартом де-факто для современной веб-разработки. В этой статье мы рассмотрим продвинутые техники, которые помогут вам писать более качественный и безопасный код.

Дженерики и их применение

Дженерики позволяют создавать переиспользуемые компоненты и функции:

```typescript // Простой дженерик function identity<T>(arg: T): T { return arg; }

// Дженерик с ограничениями interface Lengthwise { length: number; }

function logLength<T extends Lengthwise>(arg: T): T { console.log(arg.length); return arg; } ```

Utility Types

TypeScript предоставляет множество utility types для работы с типами:

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

// Partial - все поля опциональны type PartialUser = Partial<User>;

// Pick - выбрать определенные поля type UserPreview = Pick<User, 'id' | 'name'>;

// Omit - исключить определенные поля type UserWithoutId = Omit<User, 'id'>;

// Record - создать объект с определенными ключами type UserRoles = Record<string, User>; ```

Условные типы

Условные типы позволяют создавать сложную логику типов:

```typescript type NonNullable<T> = T extends null | undefined ? never : T;

type Flatten<T> = T extends Array<infer U> ? U : T;

type ApiResponse<T> = T extends string ? { message: T } : { data: T }; ```

Паттерны проектирования

Builder Pattern

```typescript class QueryBuilder { private query: string = '';

select(fields: string[]): this { this.query += `SELECT ${fields.join(', ')}`; return this; }

from(table: string): this { this.query += ` FROM ${table}`; return this; }

where(condition: string): this { this.query += ` WHERE ${condition}`; return this; }

build(): string { return this.query; } } ```

Best Practices

  1. Используйте strict mode - включите все строгие проверки
  2. Избегайте any - используйте unknown когда тип неизвестен
  3. Используйте дженерики - для переиспользуемого кода
  4. Применяйте utility types - для упрощения работы с типами

Заключение

Продвинутые техники TypeScript помогают создавать более безопасный и поддерживаемый код. Практикуйтесь и экспериментируйте с различными паттернами!