Вопросы по TypeScript на собеседовании и ответы на них

Автор: Aaron Cao · Обновлено

Вопросы по TypeScript на собеседовании и ответы на них
На собеседованиях по TypeScript проверяют не знание синтаксиса, а понимание системы типов: структурной типизации, различий между any и unknown, обобщений с ограничениями и сужения типов. Будьте готовы к практическому этапу, где нужно добавить типы в существующий JavaScript-код, а также к дополнительным вопросам о строгом режиме и причинах исчезновения типов во время выполнения.

На собеседованиях по 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?

Больше, чем ожидают кандидаты. Замыкания, цикл событий, семантика обещаний и прототипное наследование встречаются регулярно, поскольку типы надстраиваются над этим поведением, а не заменяют его.

Что делать, если на практическом этапе меня поставила в тупик ошибка типов?

Прочитайте ошибку вслух, двигаясь от самой внутренней строки наружу, и объясните, какое представление сложилось у компилятора. Интервьюеры оценивают метод диагностики, и признание, что сначала вы проверили бы выведенный тип, выглядит убедительнее, чем попытка угадать подходящие аннотации.

Похожие вопросы

← Подробнее: Вопросы на собеседовании по роли и теме