Выбор ответа Middle Условные и mapped-типы обновлено
Mapped-тип и необязательные поля
Вопрос
Какой тип у F?
type Flags<T> = { [K in keyof T]: boolean };
type F = Flags<{ a?: string; b: number }>;
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: { a?: boolean; b: boolean }. Mapped-тип вида { [K in keyof T]: ... } гомоморфный: он копирует модификаторы ? и readonly исходных полей.
Варианты ответа
{ a: boolean | undefined; b: boolean }{ a: boolean; b: boolean }{ a?: boolean; b: boolean }правильный ответ{ a?: boolean | undefined; b?: boolean }
Разбор
Mapped-тип вида { [K in keyof T]: ... } гомоморфный: он копирует модификаторы ? и readonly исходных полей. Поэтому a остаётся необязательным, а b обязательным.
Чтобы снять ?, пишут -?, чтобы добавить всем, ?. Поле b не становится необязательным само.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.