Напиши тип Middle Условные и mapped-типы обновлено
Снятие readonly и ? в mapped-типе
Вопрос
Какой тип получится? Впишите тип.
type Strict<T> = { -readonly [K in keyof T]-?: T[K] };
type M = Strict<{ readonly a?: number }>; // /* ? */
Попробуйте сами
Напишите тип, как написали бы в коде.
Показать ответ и разбор
Коротко
Правильный тип: { a: number }. Модификаторы -readonly и -? снимают признаки у ключей.
Правильный тип
{ a: number }
Разбор
Модификаторы -readonly и -? снимают признаки у ключей. При снятии ? TS убирает и добавленный им undefined, поэтому получается number, а не number | undefined. Так устроены встроенные Required<T> (-?) и самописный Mutable<T>.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.