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

Пользовательский type guard

Вопрос

Какой должна быть сигнатура возвращаемого значения, чтобы функция сужала тип до User?

function isUser(x: unknown): /* ? */ { return typeof x === 'object' && x !== null && 'id' in x; }

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

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

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

Коротко

Правильный тип: x is User. Ответ Почему так x is User - type predicate: возвращает boolean, но компилятор сужает тип в ветке.

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

x is User

Разбор

Ответ

x is User

Почему так

x is User - type predicate: возвращает boolean, но компилятор сужает тип в ветке. Для классов достаточно instanceof, для union - поле-дискриминатор.

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

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