Вопросы по TypeScript на собеседовании и ответы на них
Автор: Aaron Cao · Обновлено

На собеседованиях по TypeScript проверяют не знание синтаксиса, а понимание системы типов: структурной типизации, различий между any и unknown, обобщений с ограничениями и сужения типов. Будьте готовы к практическому этапу, где нужно добавить типы в существующий JavaScript-код, а также к дополнительным вопросам о строгом режиме и причинах исчезновения типов во время выполнения.
Что на самом деле проверяют на собеседованиях по TypeScript?
Если вы уже год разрабатываете на TypeScript, но всё ещё не чувствуете себя готовым к собеседованию, проблема обычно не в синтаксисе. В этом разделе объясняется, что действительно хотят выяснить интервьюеры: понимаете ли вы систему типов как целостную систему, а не как набор аннотаций, которые добавляют, пока не исчезнут красные волнистые подчёркивания.
Большинство собеседований строится вокруг трёх тем. Первая — что и когда известно компилятору: вывод и сужение типов, а также тот факт, что все типы исчезают до запуска кода. Вторая — композиция: обобщения, объединения и служебные типы, построенные на keyof и отображаемых типах. Третья — инженерные решения, и именно здесь выделяются кандидаты старшего уровня. Знать о существовании any — необходимый минимум; интервьюеру запомнится умение объяснить, где вы готовы его допустить, а где выберете unknown и проверку во время выполнения.
Вопросы о фреймворках сопровождают все эти темы. На позиции с React спрашивают о типизации свойств, хуков и обработчиков событий. На позиции с Node — о типизации обработчиков запросов и сторонних модулей, которые поставляются без собственных типов.
Какие вопросы о системе типов встречаются чаще всего?
Эти вопросы повторяются в разных компаниях и на разных уровнях, и за каждым обычно следует дополнительный вопрос.
- Чем различаются
interfaceиtype? Интерфейсы сливаются между объявлениями и естественно описывают формы объектов. Псевдонимы типов позволяют выражать объединения, кортежи, отображаемые и условные типы. Дополнительный вопрос: что вы выберете для публичного API библиотеки и почему. - Чем различаются
any,unknownиnever?anyотключает проверку,unknownпринимает любое значение, но требует сузить тип перед его использованием, аnever— это тип без значений. Дополнительный вопрос: какneverобеспечивает исчерпывающую проверкуswitch. - Что такое структурная типизация? Совместимость определяется формой значения, а не тем, через какой интерфейс оно было объявлено. Дополнительный вопрос: как вернуть номинальное поведение с помощью брендированного типа.
- Как работает сужение типов?
typeof,instanceof,in, проверка истинности, дискриминируемые объединения с литеральным тегом и пользовательские предикаты видаx is Foo. Дополнительный вопрос: почему неправильно написанный предикат становится незаметной ложью для компилятора. - Объясните обобщения с ограничениями. Параметр, ограниченный через
extends, позволяет функции оставаться универсальной и при этом обращаться к известным членам. Дополнительный вопрос: напишитеPickилиOmitс нуля. - Что именно включает
strict? Как минимум назовитеstrictNullChecksиnoImplicitAnyи будьте готовы описать пофайловый перевод кодовой базы в строгий режим.
На собеседованиях старшего уровня встречаются и более новые возможности: оператор satisfies, проверяющий соответствие значения типу без расширения выведенного типа, и as const для литеральных типов. Больше подборок для конкретных ролей собрано в библиотеке вопросов.
Как проходит практический этап с написанием кода?
Обычно вам дают небольшой JavaScript-модуль без типов и просят правильно его типизировать за двадцать или тридцать минут. Как правило, в модуле скрыты две ловушки: функция, тип возвращаемого значения которой зависит от аргумента, и ответ API, которому код доверяет без проверки.
На собеседовании на старшую позицию фронтенд-разработчицы в логистической компании кандидатке дали обёртку над fetch и функцию рендеринга. Она типизировала обёртку с помощью обобщения, а затем прямо сказала, что это обобщение представляет собой обещание, которое компилятор не способен выполнить, поскольку во время выполнения ответ ничем не проверяется. Поэтому до передачи разобранных данных в типизированный код она добавила узкую защитную проверку. Собеседование продвинулось вперёд именно благодаря фразе о стирании типов, а не самим аннотациям.
Комментируйте свои действия во время написания кода. Объясняйте, почему выбираете объединение вместо перечисления, почему не экспортируете тип и почему оставляете один any с поясняющим комментарием. Почти по любой системе оценки правильно написанный код с пояснениями получает больше баллов, чем такой же код, написанный молча. Этот навык стоит отрепетировать на странице пробного собеседования до настоящего этапа.
Как тренироваться отвечать на эти вопросы вслух?
Чтение объяснений системы типов развивает узнавание, но не активное воспроизведение. На собеседовании нужно примерно за тридцать секунд дать определение своими словами, а это уже другой навык. Выберите шесть вопросов из списка выше и ответьте на каждый вслух, засекая время и не пользуясь заметками.
Через день повторите тот же набор, поскольку лучше всего выучатся вопросы, ответы на которые вы забудете. Для такой тренировки нужен пробный интервьюер, который задаёт дополнительный вопрос, а не удовлетворяется первым ответом; порядок настройки описан на странице руководства.
Во время настоящего собеседования помощник, который слушает интервьюера и предлагает структуру ответа, может пригодиться, если вопрос касается редко используемой вами области языка. Он работает в настольных клиентах для встреч и на вкладке браузера и не присоединяется к звонку как участник. На платформе с контролируемым тестированием, при записываемой демонстрации экрана или на управляемом компанией ноутбуке такой помощник недопустим, поэтому значение имеют вопросы, на которые вы способны ответить без подготовки.
Частые вопросы
Нужно ли знать условные типы и infer?
Стоит ли говорить, что я полностью избегаю any?
О перечислениях всё ещё спрашивают?
Сколько вопросов по JavaScript задают на собеседовании по TypeScript?
Что делать, если на практическом этапе меня поставила в тупик ошибка типов?
Похожие вопросы
- Какие вопросы по C++ задают на собеседованиях?
- What questions get asked in a non-profit job interview?
- What Copilot and AI coding assistant questions do developers get asked in interviews?
- Какие вопросы задают на втором собеседовании?
- What questions are asked in a product designer interview?
- Какие вопросы задают на собеседовании full stack разработчика?