Выбор ответа 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 исходных полей.

Варианты ответа

  1. { a: boolean | undefined; b: boolean }
  2. { a: boolean; b: boolean }
  3. { a?: boolean; b: boolean }правильный ответ
  4. { a?: boolean | undefined; b?: boolean }

Разбор

Mapped-тип вида { [K in keyof T]: ... } гомоморфный: он копирует модификаторы ? и readonly исходных полей. Поэтому a остаётся необязательным, а b обязательным.

Чтобы снять ?, пишут -?, чтобы добавить всем, ?. Поле b не становится необязательным само.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.