Мастерство 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
- Используйте strict mode - включите все строгие проверки
- Избегайте
any- используйтеunknownкогда тип неизвестен - Используйте дженерики - для переиспользуемого кода
- Применяйте utility types - для упрощения работы с типами
Заключение
Продвинутые техники TypeScript помогают создавать более безопасный и поддерживаемый код. Практикуйтесь и экспериментируйте с различными паттернами!