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

Тип в ветке else после in

Вопрос

Какой тип у v в ветке else? Впишите тип.

type Page = { items: string[] } | { total: number };

function f(v: Page) {
  if ('items' in v) {
    return v.items;
  } else {
    v; // v: /* ? */
  }
}

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

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

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

Коротко

Правильный тип: { total: number }. Оператор in сужает объединение в обе стороны: в ветке if остаются варианты, где поле items объявлено, в else остальные.

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

{ total: number }

Разбор

Оператор in сужает объединение в обе стороны: в ветке if остаются варианты, где поле items объявлено, в else остальные. Поле items есть только у первого варианта, поэтому в else остаётся { total: number }.

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

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