TypeScript
Быстрый переход к обучению
Что нужно знать
- Базовые типы и сужение типов:
unknown,any,never, user-defined type guards. - Контракты:
typevsinterface, расширение, композиция, declaration merging. - Generics:
ограничения
extends, вывод типов, reusable API и безопасные абстракции. - Discriminated unions: моделирование состояний UI и API без набора optional полей.
- Utility types:
Pick,Omit,Partial,Readonly,Recordи контроль эволюции контрактов.
Что уметь объяснить на собеседовании
- Почему
unknownбезопаснееanyв командном коде. - Когда использовать
type, а когдаinterface. - Как generic помогает избегать дублирования и скрытых ошибок.
- Почему union-модели устойчивее набора optional-полей.
- Как сохранить backward compatibility при изменении API-типов.
Грейд-фокус
- Junior: базовые типы, функции, интерфейсы, типизация простых объектов и массивов.
- Middle: generics, unions, utility types, типизация API-слоя и state-моделей.
- Senior:
границы строгости, стратегия типизации монорепы, миграции legacy-кода с
any.
Глубокие кейсы собеседования
-
UI-state как union: вместо
{ loading?: boolean; data?: T; error?: string }используем{ status: 'idle' | 'loading' | 'success' | 'error'; ... }. Это исключает невозможные состояния и снижает количество багов в рендеринге. -
API-клиент и ложная уверенность: если endpoint типизирован как
any, ошибки структуры данных всплывают только в проде. Сильный ответ:fetchJson<T>(), runtime-validation на критичных границах, error mapping. -
Exhaustive-check: в
switchпо union новый статус может тихо не обработаться. Нуженnever-assert для гарантии полноты.
Практический минимум
- Типизировать API-клиент с generic-оберткой
fetchJson<T>(). - Смоделировать асинхронный экран через discriminated union.
- Добавить
never-проверку вswitchдля exhaustiveness. - Переписать
any-heavyмодуль в строгую типизацию. - Зафиксировать, где строгая типизация реально снизила риск багов.
Типовые ловушки
- Быстрый переход на
anyпри первой сложности. - Чрезмерно сложные типы, которые не читаются командой.
- Utility types без ясного контекста применения.
- Путаница compile-time safety и runtime-validation.
Self-review перед собеседованием
- Я могу объяснить разницу
anyиunknownна реальном баге. - Я умею показать, когда
interfaceудобнееtype, и наоборот. - Я могу за 2 минуты набросать union-модель для async-экрана.
- Я понимаю, где типизация должна быть строгой, а где прагматичной.
Связанные материалы
Архивный монолит
Полный старый материал: TypeScript (архив)