Какие встроенные Utility Types есть в TypeScript?
MiddleTypeScript #typescript #utility-types
Вопрос
Какие полезные встроенные Utility Types есть в TypeScript и когда их применять?
Короткий ответ
Utility Types — это встроенные дженерик-типы, которые трансформируют уже существующие типы: делают поля опциональными, выбирают подмножество, меняют ключи и т.д. Это позволяет не дублировать интерфейсы вручную.
Подробный ответ
Самые используемые:
Partial<T>— все поля становятся опциональными. Удобно для объектов обновления (PATCH).Required<T>— обратное: все поля обязательны.Pick<T, K>— оставляет только указанные поляK.Omit<T, K>— исключает указанные поля.Record<K, V>— объект-словарь с ключамиKи значениямиV.Readonly<T>— запрещает переприсваивание полей.ReturnType<F>— извлекает тип возвращаемого значения функции.
Пример
interface User {
id: number
name: string
email: string
password: string
}
// Для формы обновления профиля пароль и id не нужны
type UpdateUserDto = Partial<Omit<User, 'id' | 'password'>>
function updateUser(id: number, dto: UpdateUserDto) { /* ... */ }
updateUser(1, { name: 'Новое имя' }) // остальные поля не обязательны
// Словарь ролей
type RolePermissions = Record<'admin' | 'editor' | 'viewer', string[]>
const permissions: RolePermissions = {
admin: ['read', 'write', 'delete'],
editor: ['read', 'write'],
viewer: ['read']
}
Дополнительные вопросы
- Как реализовать
Partial<T>самостоятельно через mapped types? - Чем
Pick/Omitотличаются от деструктуризации на уровне значений? - Что такое условные типы (
T extends U ? X : Y)?