Вопрос с собеседования · Frontend
Что такое сужение типов в TypeScript?
JuniorTypeScript
Ещё спрашивают так:
- Как работать с union-типами?
- Что такое type guard?
Коротко
Если переменная имеет тип-объединение (string | number, User | null), TypeScript позволяет использовать только общее. Проверка внутри кода сужает тип в ветке: typeof (примитивы), instanceof (классы), in (наличие свойства), сравнение с null, дискриминант (общее поле type у вариантов). Свои проверки — type guard function isUser(x): x is User.
- Дискриминированные объединения + switch — надёжная модель состояний
- Проверка never в default ловит необработанный вариант
- Оператор ! (non-null) отключает проверку — использовать редко
Подробно
type State = { status: 'loading' } | { status: 'ok'; data: User } | { status: 'error'; message: string };
function view(s: State) {
if (s.status === 'ok') return s.data.name; // s сужен до варианта ok
}Что хотят услышать
- Сужение через typeof, in, сравнение.
- Дискриминированные объединения.
- Type guard.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗TypeScript сам угадывает тип union без проверок
- ✗Сужение типов работает только в рантайме, компилятор о нём не знает
- ✗Оператор ! — лучший способ работы с null
- ✓typeof, instanceof, in или поле-дискриминант сужают тип в ветке; свои — type guard
Связанные вопросы
Партнёр платформы
Разбор собеседования
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.