Напиши тип 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 ошибок.