// статья
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. Комбинируя их, можно создавать сложные типы без дублирования кода.