> Что такое utility types в TypeScript, например Partial и DeepPartial (TypeScript)
Уровень: junior · Роль: frontend · Категория: Технические вопросы
Компании: Иннотех, Инрэко, Soft_Media_Group, DigitalSail, Арго
Стек: TypeScript
> Пример ответа
Короткий ответ
Utility types в TypeScript - это встроенные generic-типы, которые упрощают манипуляции с существующими типами. Partial<T> делает все свойства типа T опциональными. DeepPartial - это рекурсивная версия Partial, которая делает опциональными свойства на всех уровнях вложенности объекта. Такие типы помогают писать более гибкий и безопасный код без ручного дублирования.
Подробное объяснение
Utility types - это часть стандартной библиотеки TypeScript, которая предоставляет готовые инструменты для трансформации типов. Они работают на уровне системы типов и не влияют на рантайм. Partial<T> использует mapped types с модификатором ? для каждого свойства. DeepPartial не входит в стандартную библиотеку, но легко реализуется через рекурсивный mapped type. Основная цель - избежать дублирования кода и сохранить связь между исходным и производным типом.
На практике
Partial часто используется при обновлении данных, когда нужно передать только изменяемые поля. DeepPartial полезен для конфигураций с вложенными объектами или при работе с частичными ответами от API. Важно помнить, что DeepPartial может привести к потере строгости типов на глубоких уровнях, поэтому его стоит применять осознанно. В реальных проектах такие типы помогают сократить количество объявлений и улучшить читаемость.
Пример кода
TYPESCRIPT// Встроенный Partialinterface User {name: string;age: number;address: {city: string;zip: string;};}function updateUser(id: number, updates: Partial<User>) {// обновление только переданных полей}// Реализация DeepPartialtype DeepPartial<T> = {[P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];};function updateConfig(partial: DeepPartial<Config>) {// безопасное обновление вложенных полей}
Как отвечать на собеседовании
Начни с краткого определения utility types как встроенных инструментов для трансформации типов. Объясни Partial на простом примере, затем перейди к DeepPartial, подчеркнув его рекурсивную природу. Упомяни, что DeepPartial не встроен, но легко реализуется. Покажи понимание trade-off: гибкость против строгости типов. Если спросят про другие utility types, упомяни Required, Pick, Omit как смежные концепции.
Что проверяет интервьюер
Интервьюер оценивает понимание системы типов TypeScript, умение работать с mapped types и рекурсивными типами. Важно показать знание стандартных utility types и способность создавать свои. Проверяется практическое применение - когда и зачем использовать Partial и DeepPartial. Также оценивается понимание разницы между поверхностной и глубокой опциональностью.
Типичные ошибки
Кандидаты часто путают Partial с Pick или думают, что Partial работает рекурсивно. Другая ошибка - считать, что utility types влияют на рантайм. Некоторые забывают, что DeepPartial нужно реализовывать вручную. Также встречается непонимание, что Partial не делает свойства undefined - он делает их опциональными, что в TypeScript не одно и то же.
> Похожие задачи по frontend
Как типизировать функцию, работающую с массивом промисов с разными типами в TypeScript
Как реализовать функцию getProperty с типизацией в TypeScript, которая возвращает значение по ключу объекта?
Что такое enum в TypeScript
Что такое объединение и пересечение типов в TypeScript
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью