Выбор ответа Junior Утилитарные типы спрашивают часто обновлено
Partial не глубокий
Вопрос
Что скажет компилятор?
type Profile = { name: string; address: { city: string } };
const p: Partial<Profile> = { address: {} };
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Ошибка: в address нет обязательного поля city. Partial это mapped-тип верхнего уровня: { [K in keyof T]?: T[K] }.
Варианты ответа
- Ошибка: поле
addressобязательно - Всё компилируется, но
addressполучает типany - Всё компилируется:
Partialделает необязательными все поля на любой глубине - Ошибка: в
addressнет обязательного поляcityправильный ответ
Разбор
Partial это mapped-тип верхнего уровня: { [K in keyof T]?: T[K] }. Само поле address стало необязательным, но его тип остался { city: string }, где city обязателен. Пустой объект в address не проходит.
Для вложенных объектов нужен рекурсивный DeepPartial, его во встроенных утилитах нет. Поле address необязательно, и any тут не появляется.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.