Напиши тип Senior Объединения и сужение обновлено

satisfies и расширение литерала

Вопрос

Какой тип получится? Впишите тип.

const c = { mode: 'dark' } satisfies { mode: string };
type M = typeof c.mode; // /* ? */

Попробуйте сами

Напишите тип, как написали бы в коде.

Показать ответ и разбор

Коротко

Правильный тип: string. satisfies не меняет выведенный тип, но контекстный тип участвует в выводе.

Правильный тип

string

Разбор

satisfies не меняет выведенный тип, но контекстный тип участвует в выводе. Здесь контекст для mode это string, литерал 'dark' в изменяемом свойстве расширяется, и получается string. Если бы проверяли против { mode: 'dark' | 'light' }, литерал сохранился бы: 'dark'. Чтобы сохранить литерал при широком типе, пишут as const satisfies ....

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

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