// статья

TypeScript Utility Types: полное руководство

Разбираемся с Partial, Required, Pick, Omit и другими встроенными utility types в TypeScript. Практические примеры и паттерны использования.

Зачем нужны Utility Types?

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

Partial<T>

Делает все свойства типа необязательными:

interface User {
  name: string;
  email: string;
  age: number;
}

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

function updateUser(id: string, data: UpdateUserDto) {
  // data.name, data.email, data.age — все опциональны
}

Pick<T, K>

Выбирает только указанные свойства:

type UserPreview = Pick<User, 'name' | 'email'>;
// { name: string; email: string }

Omit<T, K>

Исключает указанные свойства:

type UserWithoutAge = Omit<User, 'age'>;
// { name: string; email: string }

Record<K, V>

Создаёт тип объекта с ключами типа K и значениями типа V:

type UserRoles = Record<string, 'admin' | 'user' | 'moderator'>;

const roles: UserRoles = {
  alice: 'admin',
  bob: 'user',
};

Заключение

Utility types — это фундамент продвинутой работы с типами в TypeScript. Комбинируя их, можно создавать сложные типы без дублирования кода.