Видеоуроки, интерактивный редактор и сохранение прогресса — бесплатно, сразу после входа.
ВойтиСоздать аккаунт — бесплатноЗакончили урок?
Войдите, чтобы отмечать прогресс
Здесь важны обе правки: interface заменён на type, потому что объединению литералов интерфейс имя дать не может, и перечислены сами допустимые значения.
Интерфейс во всех этих случаях либо не подходит вовсе, либо выглядит громоздко.
Объявления с одинаковым именем сливаются в одно:
Это называется declaration merging и используется, чтобы дополнять типы чужих библиотек. У type повторное объявление это ошибка «Duplicate identifier».
Для описания объектов бери то, что принято в проекте, разница почти незаметна. Для всего остального (объединения, функции, массивы, производные типы через Pick и Omit) остаётся только type. Если правила в проекте нет, разумный дефолт: type по умолчанию, interface там, где нужно расширение публичного API библиотеки.
interface Status {} не означает «пока не знаю, что здесь будет». Пустой объектный тип совместим почти с чем угодно, кроме null и undefined, поэтому он не столько описывает, сколько отключает проверку. Если тип пока неизвестен, честнее unknown, а не пустой интерфейс.