Собеседование TypeScript - вопросы и подготовка

TypeScript давно перестал быть просто надстройкой над JavaScript. Сегодня это один из ключевых инструментов для создания масштабируемых frontend- и backend-приложений, корпоративных платформ, SDK и распределённых систем. Этот набор карточек охватывает весь путь изучения TypeScript: от базовых концепций до архитектурного уровня Senior и Staff Engineer. Вы разберётесь с типами, интерфейсами, generics, utility types, type guards, union и intersection types, conditional types, infer, mapped types, template literal types и другими возможностями современной системы типов. Отдельное внимание уделено практическому применению TypeScript в крупных проектах: организации монорепозиториев, проектированию публичных API библиотек, построению безопасных SDK, типизации REST и GraphQL-контрактов, интеграции с runtime-валидацией через Zod и io-ts, а также управлению архитектурными границами между слоями системы. Карточки помогают не только запомнить синтаксис, но и понимать реальные компромиссы: когда использовать строгую типизацию, почему any становится источником дефектов, какие проблемы создают чрезмерно сложные generics и условные типы, а также как поддерживать производительность компиляции в больших кодовых базах. Набор будет полезен frontend- и backend-разработчикам, техническим лидерам, архитекторам, а также кандидатам, готовящимся к собеседованиям уровня Middle, Senior и Lead. Материал структурирован так, чтобы сформировать системное понимание TypeScript и научиться принимать обоснованные архитектурные решения в production-разработке. Вам также может быть интересно: Собеседование Frontend (React) - вопросы и подготовка Собеседование Frontend (JavaScript) - вопросы и подготовка Собеседование Frontend (CSS) - вопросы и подготовка Собеседование Frontend (HTML) — вопросы и подготовка

You can take a test to reveal missed lore before start a training.

Test Your Might

You can start studying this pack. You'll receive 364 messages to help you review each card multiple times, following the principles of the forgetting curve.

Learn more about the spaced repetition method.
TypeScript

Что такое TypeScript, включая его цели, отличие от JavaScript, процесс компиляции и преимущества при разработке крупных приложений?

1/91
Структурная типизация в TypeScript

Кратко: в TypeScript используется структурная (по форме) типизация — совместимость типов определяется не именами, а наличием и типами свойств/сигнатур. Если форма одного значения удовлетворяет требованиям ожидаемого типа, присваивание разрешено.

2/91
Type inference в TypeScript

Что такое type inference в TypeScript: механизм, примеры автоматического определения типов и возможные проблемы при его использовании.

3/91
Type annotations в TypeScript

Что такое type annotations в TypeScript, включая явное указание типов, влияние на читаемость кода и ситуации, когда они необходимы?

4/91
Literal types (литеральные типы)

Что такое literal types и зачем они нужны?

5/91
Union types (объединения типов)

Что такое union types? Union type — это тип, который может быть одним из нескольких вариантов. В TypeScript/Flow/других системах типизации записывается как A | B | C и означает, что значение принадлежит хотя бы одному из перечисленных типов.

6/91
Intersection types (пересечения типов)

Что такое intersection types, включая объединение контрактов типов, расширение моделей данных и возможные конфликты свойств?

7/91
Type aliases (псевдонимы типов)

Что такое type aliases в TypeScript: краткое определение и назначение.

8/91
interface и type (TypeScript)

Коротко о различиях между interface и type в TypeScript: оба описывают типы объектов, но имеют разные возможности по слиянию, расширению и применимости к особым конструкциям (унции, кортежи, mapped types).

9/91
interfaces (TypeScript)

Что такое interfaces, включая описание контрактов объектов, расширение интерфейсов и сценарии их использования в крупных проектах?

10/91
enum в TypeScript

Краткое руководство: что такое enum, как они представлены в runtime, различия между numeric и string enums и альтернативы.

11/91
const assertions ("as const") в TypeScript

Что это: const assertions (синтаксис as const) — способ сказать компилятору TypeScript: «инферируй максимально узкий (литеральный) тип для этого выражения и сделай его readonly». Это влияет на литералы, массивы/кортежи и свойства объектов.

12/91
readonly в TypeScript — что это и как работает

Readonly блокирует присвоение на уровне компилятора для свойств и коллекций (например, readonly свойства, readonly массивы). Это преимущественно средство статической проверки — по умолчанию защита поверхностная и может быть обойдена или не работать в runtime без дополнительных мер.

13/91
Тип never в TypeScript

Что такое never — особый тип в TypeScript, обозначающий значение, которое никогда не возникает. Используется для описания функций, которые никогда не возвращают, и для представления «невозможных» вариантов на уровне типов.

14/91
unknown в TypeScript

Что такое unknown в TypeScript и зачем он нужен?

15/91
Discriminated unions (дискриминируемые объединения)

Что такое discriminated unions, включая использование общего дискриминатора, исчерпывающую обработку вариантов и преимущества для domain modeling?

16/91
Type guards (проверки типов в TypeScript)

Что такое type guards, включая typeof, instanceof, in и пользовательские проверки типов?

17/91
Уточнение типов (type narrowing) в TypeScript

Как работает type narrowing в TypeScript: контроль потока выполнения, type guards и автоматическое уточнение типов?

18/91
Excess property checks (проверка лишних свойств)

Что такое excess property checks в TypeScript и как они помогают ловить ошибки при работе с литералами объектов?

19/91
Пользовательские type guards в TypeScript

Как работают user-defined type guards, включая предикаты типов, повторное использование логики проверки и ограничения такого подхода?

20/91
Совместимость типов в TypeScript

Как работает совместимость типов в TypeScript: принципы structural typing, вариативность (covariance/contravariance) и случаи bivariance. Коротко о правилах присваивания и практических подсказках.

21/91
Declaration merging в TypeScript

Что такое declaration merging, включая объединение интерфейсов, расширение сторонних библиотек и потенциальные риски?

22/91
Стирание типов после компиляции

Как работает механизм стирания типов после компиляции и какие архитектурные последствия это даёт?

23/91
Контроль потока типов в TypeScript

Как работает контроль потока типов (control flow type analysis) в TypeScript: кратко о том, как компилятор автоматически сужает типы по результатам проверок, ветвлений и ранних возвратов.

24/91
Module augmentation (расширение модулей в TypeScript)

Что такое module augmentation и как с его помощью расширять типы внешних пакетов и поддерживать сторонние API?

25/91
Generics (обобщения)

Generics — это параметризованные типы (обобщения), которые позволяют описывать функции, классы и типы так, чтобы они работали с разными типами данных, сохраняя строгую типизацию и избегая дублирования кода.

26/91
Generic constraints, <strong>extends</strong> и проектирование API

Как работают generic constraints, включая ограничение допустимых типов, ключевое слово extends и принципы проектирования API?

27/91
Generic defaults — значения типов по умолчанию

Что такое generic defaults — значения типов по умолчанию для параметров обобщённых типов, и как они влияют на удобство использования библиотек?

28/91
Обобщённые (generic) функции в TypeScript

Как работают generic functions, включая вывод типов аргументов и сохранение связей между входными и выходными данными?

29/91
Generic-интерфейсы

Как работают generic interfaces, включая описание типизированных контрактов и повторное использование компонентов?

30/91
Conditional types (условные типы)

Что такое conditional types в TypeScript — условная логика на уровне типов и реальные сценарии применения.

31/91
conditional types (условные типы)

Что такое conditional types в TypeScript и где их применяют?

32/91
Generic-классы: типизация состояния и reusable abstractions

Как работают generic-классы: как задать точную типизацию состояния объектов и строить переиспользуемые абстракции с гарантией типов на этапе компиляции.

33/91
infer в conditional types

Как работает infer внутри conditional types, включая извлечение типов и построение сложных типовых утилит?

34/91
Utility types: Partial, Required, Readonly, Pick

Эти встроенные утилиты TypeScript позволяют трансформировать типы через mapped types: делать поля необязательными, обязательными, только для чтения или выбирать подмножество свойств. Это удобно для DTO, update-параметров, API-ответов и безопасных преобразований типов.

35/91
mapped types (TypeScript)

Что такое mapped types, включая автоматическую трансформацию свойств объектов и практические сценарии применения?

36/91
Проблемы производительности при чрезмерном использовании сложных generics

Какие проблемы производительности могут возникать при чрезмерном использовании сложных generics, включая влияние на скорость компиляции и поддержку кода?

37/91
Distributive conditional types (распределяющиеся условные типы)

Что такое distributive conditional types, включая автоматическое распределение по union types и связанные ограничения?

38/91
keyof (TypeScript)

Как работает keyof в TypeScript — получение ключей типа и безопасные generic-конструкции.

39/91
Template literal types в TypeScript

Что такое template literal types, включая генерацию строковых типов и использование для типизации сложных API?

40/91
Utility-типы: Omit, Exclude, Extract и NonNullable

Как работают utility-типы Omit, Exclude, Extract и NonNullable — краткое руководство с практическими примерами для моделей данных и API-контрактов.

41/91
Indexed access types — доступ к типам свойств и повторное использование моделей данных

Как работает indexed access types в TypeScript и как ими удобно извлекать типы свойств для повторного использования моделей данных?

42/91
Рекурсивные типы и древовидные структуры

Что такое recursive types, включая описание древовидных структур данных и ограничения компилятора?

43/91
Branded types — эмуляция номинальной типизации

Что такое branded types и как ими эмулировать номинальную типизацию и защитить от смешивания несовместимых значений?

44/91
function overloading

Что такое function overloading и как работают несколько сигнатур одной функции?

45/91
Типизация функций в TypeScript

Как типизировать функции в TypeScript, включая параметры, возвращаемые значения и перегрузки функций?

46/91
Optional параметры и default параметры

Как работают optional parameters и default parameters, включая влияние на типизацию API?

47/91
Глубокие версии utility types: DeepPartial, DeepReadonly и сложности

Как реализовать глубокие (recursive) варианты утилитных типов в TypeScript — DeepPartial, DeepReadonly и смежные — и с какими проблемами можно столкнуться?

48/91
Типизация доменной модели и проверка бизнес-правил на этапе компиляции

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

49/91
Типизация callback-функций

Как типизировать callback-функции, включая передачу поведения и поддержку переиспользуемых компонентов?

50/91
Типизация асинхронных API‑клиентов

Как типизировать асинхронные API‑клиенты, включая сетевые запросы, обработку ответов и ошибки выполнения?

51/91
Типизация Promise и async/await

Как типизировать Promise и async/await, включая обработку асинхронных результатов и ошибок?

52/91
TypeScript для масштабируемой архитектуры frontend

Как использовать TypeScript для построения масштабируемой архитектуры frontend-приложения, включая разделение слоев, контракты и поддержку долгосрочной разработки?

53/91
Безопасная обработка ошибок в TypeScript

Как организовать безопасную обработку ошибок в TypeScript, включая unknown в catch-блоках и архитектурные компромиссы?

54/91
Shared types между frontend и backend

Как организовать общие типы между frontend и backend, синхронизировать контракты и предотвращать рассогласования?

55/91
TypeScript для backend-сервисов

Как использовать TypeScript для проектирования backend-сервисов, включая типизацию бизнес-логики, DTO и интеграций?

56/91
Строгая типизация vs скорость разработки

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

57/91
Проектирование публичных API библиотек на TypeScript

Как проектировать публичные API библиотек на TypeScript, чтобы контракты были стабильны, удобны для пользователей и эволюционировали безопасно?

58/91
TypeScript в монорепозиториях

Как использовать TypeScript в монорепозиториях: совместное использование типов и управление зависимостями.

59/91
Проблемы использования any в production-коде

Какие проблемы возникают при использовании any в production-коде, включая потерю гарантий типобезопасности и скрытые дефекты?

60/91
TypeScript и Domain-Driven Design

Как использовать TypeScript при построении Domain-Driven Design: моделирование сущностей, value objects и доменных ограничений.

61/91
Типизация данных из внешних API

Как типизировать данные из внешних API, включая недоверенные данные, runtime-валидацию и предотвращение ошибок?

62/91
Чрезмерная связанность типов между модулями

Какие архитектурные проблемы возникают при чрезмерной связанности типов между модулями и как их избегать?

63/91
Интеграция TypeScript с runtime-валидацией (Zod, io-ts и др.)

Как сочетать статические типы TypeScript с проверкой данных в runtime: когда и какие библиотеки использовать, типичные шаблоны и примеры с Zod и io-ts.

64/91
Типизация сторонних библиотек без официальной поддержки TypeScript

Какие проблемы возникают при типизации сторонних библиотек без официальной поддержки TypeScript и как их решать?

65/91
Миграция большого JavaScript-проекта на TypeScript

Как безопасно мигрировать большой JavaScript-проект на TypeScript, включая стратегию внедрения и управление рисками?

66/91
TypeScript для безопасных SDK: версии контрактов и обратная совместимость

Как использовать TypeScript для построения безопасных SDK, включая управление версиями контрактов и обеспечение обратной совместимости?

67/91
Проблемы от слишком сложных условных типов

Какие проблемы могут вызывать слишком сложные условные типы, включая деградацию производительности IDE и компилятора?

68/91
Типизация конфигураций приложения

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

69/91
Факторы, влияющие на производительность компиляции TypeScript

Производительность компиляции зависит от объёма проекта (количества файлов и зависимостей), сложности используемых типов (рекурсивные/условные/мэппед-типы), настроек компилятора и организации модулей (импорты, ссылочные проекты, пути).

70/91
Incremental compilation и Project References (TypeScript)

Как работают incremental compilation и project references в TypeScript и как они помогают ускорить сборку больших проектов.

71/91
Типизация событий в event-driven архитектуре

Как типизировать события в event-driven архитектуре, включая контракты сообщений и эволюцию схем данных?

72/91
Проблемы чрезмерного использования any

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

73/91
Организация tsconfig для крупного проекта

Короткая инструкция по организации конфигурации TypeScript в крупном проекте: единый базовый tsconfig, окружные переопределения (app/node/test), поддержка монорепозитория с paths и/или проектными ссылками (project references), а также включение strict и практик для стабильной сборки.

74/91
Strict mode — преимущества и ограничения

Краткий обзор преимуществ и ограничений строгого режима (например, 'use strict' в JavaScript или параметр strict в TypeScript), а также влияние на качество кода и оценка стоимости внедрения.

75/91
Риски использования type assertions

Какие риски несет использование type assertions без достаточных проверок, включая скрытые runtime-ошибки?

76/91
Почему сложные generic-конструкции становятся антипаттерном

Почему чрезмерно сложные generic-конструкции могут стать антипаттерном, включая влияние на поддержку и обучение команды?

77/91
Признаки агрессивного использования типовой системы

Признаки того, что типовая система используется слишком агрессивно, и это снижает читаемость и усложняет сопровождение.

78/91
Когда enum — плохой выбор (альтернативы и компромиссы)

Почему использование enum может быть не лучшим выбором в некоторых проектах, включая альтернативы и связанные компромиссы?

79/91
Типовая система типов для микросервисной платформы

Как спроектировать типовую систему для крупной микросервисной платформы, чтобы управлять эволюцией контрактов, обеспечивать совместимость версий и сохранять независимость команд?

80/91
Type-safe коммуникация между сервисами (REST, GraphQL, события)

Как использовать TypeScript для обеспечения type-safe коммуникации между сервисами по REST, GraphQL и через событийные шины — принципы, инструменты и примеры.

81/91
Проектирование SDK для тысяч внешних разработчиков

Как проектировать SDK для тысяч внешних разработчиков: удобный API, стабильные контракты и долгосрочная поддержка.

82/91
Компромиссы: runtime validation vs compile-time типизация

Какие компромиссы возникают между проверкой данных во время выполнения (runtime validation) и компиляторной типизацией (compile-time), особенно с точки зрения безопасности данных и стоимости поддержки?

83/91
Единый источник типов в распределённой системе

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

84/91
Ошибки при проектировании публичных типов библиотек

Какие ошибки чаще всего допускают при проектировании публичных типов библиотек, включая несовместимые изменения и утечки деталей реализации?

85/91
Типизация в polyrepo и monorepo

Как организовать типизацию в polyrepo и monorepo: повторное использование контрактов, управление зависимостями и практические стратегии.

86/91
Дублирование моделей типов между слоями

Какие проблемы возникают при дублировании моделей типов между слоями приложения и как их избежать?

87/91
Ограничения TypeScript в очень крупных проектах

Какие ограничения TypeScript становятся заметны в очень крупных проектах, включая производительность, сложность типов и организационные проблемы?

88/91
Стратегия миграции типов при изменении доменной модели

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

89/91
TypeScript — когда выбирать и когда избегать

В каких ситуациях TypeScript даёт заметную пользу, а когда его внедрение приносит больше затрат, чем выгоды, с учётом команды, проекта и жизненного цикла.

90/91
TypeScript и архитектурные границы

Как использовать TypeScript для управления архитектурными границами системы и предотвращения утечек абстракций между слоями.

91/91
WitSlice © 2026