Тренажер TypeScript — практические задачи с визуализацией типов
Тренажер TypeScript представляет собой бесплатную онлайн-платформу для изучения языка программирования через решение практических задач без регистрации. Платформа ориентирована на тех, кто уже знаком с основами JavaScript и хочет освоить систему типов TypeScript на практике. Все задания выполняются прямо в браузере без установки дополнительного программного обеспечения.
В основе тренажера лежит принцип обучения через действие. Теоретические блоки отсутствуют — пользователь сразу переходит к написанию и анализу кода. Такой подход позволяет быстрее усвоить синтаксис аннотаций типов, понять работу системы вывода типов и научиться применять продвинутые конструкции вроде Generics и Utility Types.
Структура обучения: от примитивных типов до Conditional Types
Программа тренажера охватывает 28 тематических модулей и содержит более 100 практических заданий. Материал выстроен по принципу постепенного усложнения: от базовых аннотаций типов к продвинутым паттернам типизации.
Примитивные и специальные типы
Первые модули посвящены работе с базовыми типами данных TypeScript. Пользователь учится объявлять переменные с явным указанием типа, понимать разницу между any и unknown, правильно использовать void и never. Примеры заданий:
- Указать правильную аннотацию типа для переменной, хранящей возраст пользователя
- Найти ошибку в коде, где переменной типа
unknownприсваивается значение без проверки - Определить, какой тип выведет компилятор для функции без явного return
Массивы, кортежи и объекты
Модули по составным типам данных охватывают типизацию массивов в двух синтаксисах (Type[] и Array), работу с кортежами фиксированной длины и описание структуры объектов. Задания включают:
- Собрать из частей тип для массива товаров интернет-магазина
- Исправить ошибку в кортеже, описывающем координаты точки на карте
- Добавить опциональное свойство в интерфейс профиля пользователя
Функции и их типизация
Раздел по функциям включает типизацию параметров и возвращаемых значений, работу с опциональными параметрами, rest-параметрами и callback-функциями. Практические задачи:
- Написать сигнатуру функции расчёта стоимости доставки с опциональной скидкой
- Сопоставить функции с их типовыми сигнатурами
- Предсказать ошибку компиляции при передаче неправильного типа аргумента
Union типы и сужение типов
Модуль по Union типам объясняет создание типов-объединений и техники сужения типов через Type Guards. Пользователь осваивает проверки через typeof, instanceof, оператор in и пользовательские предикаты типов. Примеры:
- Заполнить пропуски в функции, принимающей
string | number - Расставить строки кода для корректного сужения Union типа
- Написать пользовательский Type Guard для проверки объекта на соответствие интерфейсу
Интерфейсы и Type Aliases
Два связанных модуля раскрывают способы создания пользовательских типов. Рассматривается расширение интерфейсов через extends, пересечение типов, Declaration Merging. Задания:
- Выбрать между interface и type для описания API-ответа
- Объединить два интерфейса в один с помощью наследования
- Найти ошибку в пересечении несовместимых типов
Классы в TypeScript
Модуль по классам охватывает модификаторы доступа (public, private, protected), сокращённую инициализацию в конструкторе, реализацию интерфейсов и абстрактные классы. Практика:
- Расставить модификаторы доступа для свойств класса банковского счёта
- Реализовать интерфейс платёжной системы в классе
- Исправить ошибку доступа к protected-свойству из внешнего кода
Generics
Два модуля по обобщённым типам ведут от базового синтаксиса к продвинутым ограничениям. Пользователь учится создавать Generic-функции, интерфейсы и классы, применять constraints через extends. Задачи:
- Написать Generic-функцию для получения первого элемента массива
- Добавить ограничение типа для функции, работающей только с объектами
- Предсказать результат вызова Generic-функции с разными типами аргументов
Utility Types
Три модуля посвящены встроенным утилитарным типам TypeScript. Рассматриваются Partial, Required, Readonly, Pick, Omit, Record, Exclude, Extract, ReturnType, Parameters. Примеры заданий:
- Применить
Partialдля создания типа частичного обновления профиля - Сопоставить Utility Types с их описаниями
- Выбрать правильный тип для словаря с ключами-строками и значениями-числами
Продвинутые типы
Завершающие модули охватывают операторы keyof и typeof, Mapped Types, Conditional Types и паттерн Discriminated Unions. Задания этого уровня:
- Создать тип ключей объекта конфигурации с помощью
keyof typeof - Написать Mapped Type, делающий все свойства опциональными
- Реализовать exhaustiveness checking для обработки всех вариантов Union типа
Практические паттерны
Финальный модуль посвящён типизации реального кода: события DOM, fetch-запросы, работа с JSON и localStorage. Пользователь применяет полученные знания к задачам из повседневной разработки:
- Типизировать обработчик события клика по кнопке
- Описать тип ответа API для списка товаров
- Создать типобезопасную обёртку над localStorage
Визуализация работы системы типов
Часть уроков снабжена интерактивным скриптом визуализации. Пользователь наблюдает пошаговое выполнение кода на примерах из практики: оформление заказа в интернет-магазине, фильтрация списка пользователей, расчёт скидок. На каждом шаге отображаются текущие типы переменных и результаты проверок.
В режиме викторины выполнение останавливается, и пользователю предлагается предсказать тип переменной или результат сужения Union типа. Такой формат помогает глубже понять логику работы компилятора TypeScript и вывода типов.
Форматы практических заданий
Тренажер использует девять форматов упражнений для разностороннего закрепления материала:
- Заполнение пропусков — вставить недостающие аннотации типов или ключевые слова
- Поиск ошибок — найти и исправить ошибку типизации в готовом коде
- Сборка из частей — составить рабочий интерфейс или тип из предложенных фрагментов
- Предсказание результата — указать, какой тип выведет компилятор или какая ошибка возникнет
- Сопоставление — связать типы с их описаниями или примерами использования
- Упорядочивание — расставить строки кода для корректного сужения типов
- Сортировка по группам — распределить конструкции по категориям
- Выбор из банка — заполнить пропуски вариантами из предложенного списка
- Написание результата — самостоятельно указать выводимый тип или значение
Технические особенности платформы
Код выполняется непосредственно в браузере.
Каждое задание сопровождается мгновенной проверкой с обратной связью. При неправильном ответе пользователь получает пояснение, помогающее разобраться в ошибке. Прогресс сохраняется в браузере.
Целевая аудитория
Тренажер рассчитан на разработчиков с базовым знанием JavaScript, желающих освоить TypeScript. Платформа подходит для:
- Студентов технических специальностей, изучающих веб-разработку
- JavaScript-разработчиков, переходящих на TypeScript
- Фронтенд-специалистов, работающих с React, Angular или Vue
- Бэкенд-разработчиков, использующих Node.js
- Самостоятельно обучающихся программированию
Часто задаваемые вопросы
Нужно ли знать JavaScript перед изучением TypeScript?
Да, TypeScript является надмножеством JavaScript и добавляет к нему систему типов. Тренажер предполагает знание базовых конструкций JavaScript: переменные, функции, массивы, объекты, классы. Задания сосредоточены на типизации и особенностях TypeScript, а не на синтаксисе JavaScript.
Сколько времени занимает прохождение всех заданий?
Полное прохождение 100+ заданий занимает от 15 до 30 часов в зависимости от начального уровня подготовки. Рекомендуется проходить 3-5 заданий за сессию с перерывами для усвоения материала. Модули по Generics и продвинутым типам требуют больше времени на осмысление.
Можно ли пропускать модули и проходить задания в произвольном порядке?
Технически платформа позволяет открывать любые задания. Однако материал выстроен последовательно: продвинутые модули опираются на понятия из предыдущих. Пропуск базовых тем по Union типам или Generics затруднит понимание Utility Types и Conditional Types.
Чем тренажер отличается от документации TypeScript?
Официальная документация объясняет концепции и приводит примеры. Тренажер предлагает активную практику: пользователь не читает о типах, а работает с ними напрямую. Форматы заданий — поиск ошибок, сборка кода, предсказание результатов — задействуют разные аспекты понимания материала.
Подходит ли тренажер для подготовки к собеседованию?
Тренажер охватывает темы, часто встречающиеся на технических интервью: Union типы, Type Guards, Generics, Utility Types, Discriminated Unions. Задания на предсказание результата и поиск ошибок близки к формату вопросов на собеседованиях. Для полноценной подготовки рекомендуется дополнительно решать алгоритмические задачи.
Работает ли тренажер на мобильных устройствах?
Платформа адаптирована для мобильных браузеров. Задания на выбор вариантов, сопоставление и сортировку удобно выполнять на смартфоне. Для заданий с написанием кода комфортнее использовать планшет или компьютер с физической клавиатурой.
Модуль 1: Введение в TypeScript
Название Упражнений Просмотры Важность Сложность Популярность Актуальность Аннотация типа переменной 6 58 100 10 100 100 Автоматический вывод типов (Type Inference) 6 33 95 15 100 100 Ошибки типизации при компиляции 7 113 95 20 95 100 ← Прокрутите таблицу горизонтально →
Модуль 2: Примитивные типы
Название Упражнений Просмотры Важность Сложность Популярность Актуальность Тип string 7 83 100 5 100 100 Тип number 7 35 100 5 100 100 Тип boolean 6 38 100 5 100 100 Типы null и undefined 6 18 95 25 95 100 Тип symbol 7 31 40 35 30 85 Тип bigint 6 29 30 15 20 80 ← Прокрутите таблицу горизонтально →
Модуль 3: Специальные типы
Название Упражнений Просмотры Важность Сложность Популярность Актуальность Тип any 7 30 90 15 95 100 Тип unknown 6 26 85 40 75 100 Тип void 5 28 95 15 95 100 Тип never 7 36 75 50 60 95 Разница между any и unknown 8 32 85 45 80 100 ← Прокрутите таблицу горизонтально →
Модуль 4: Массивы
Название Упражнений Просмотры Важность Сложность Популярность Актуальность Типизация массивов (Type[]) 7 22 100 15 100 100 Типизация массивов (Array) 8 19 95 15 90 100 Массивы с несколькими типами 7 36 85 25 80 100 Readonly массивы 7 19 75 30 65 95 ← Прокрутите таблицу горизонтально →
Модуль 5: Кортежи (Tuples)
Название Упражнений Просмотры Важность Сложность Популярность Актуальность Объявление кортежей 7 22 85 30 75 100 Опциональные элементы в кортежах 6 30 70 35 55 95 Rest элементы в кортежах 7 27 65 45 50 95 Readonly кортежи 8 36 60 30 45 90 ← Прокрутите таблицу горизонтально →
Модуль 6: Объекты
Название Упражнений Просмотры Важность Сложность Популярность Актуальность Аннотация типа объекта 7 45 100 20 100 100 Опциональные свойства (?) 7 17 100 20 100 100 Readonly свойства 8 39 85 25 80 100 Index Signatures 7 34 80 45 70 95 Вложенные объекты 8 16 95 30 95 100 ← Прокрутите таблицу горизонтально →
Модуль 7: Функции
Название Упражнений Просмотры Важность Сложность Популярность Актуальность Типизация параметров функции 7 32 100 15 100 100 Типизация возвращаемого значения 6 25 100 15 100 100 Опциональные параметры 8 27 95 20 95 100 Параметры по умолчанию 7 31 95 15 95 100 Rest параметры 7 21 80 30 75 100 Типизация стрелочных функций 7 28 100 20 100 100 Тип Function 8 35 70 25 65 90 Callback функции 7 28 95 35 95 100 ← Прокрутите таблицу горизонтально →
Модуль 8: Union типы
Название Упражнений Просмотры Важность Сложность Популярность Актуальность Объявление Union типов 7 18 100 25 100 100 Union с примитивами 8 42 95 20 95 100 Union с null и undefined 9 13 100 30 100 100 Сужение Union типов (Narrowing) 8 30 100 40 95 100 ← Прокрутите таблицу горизонтально →
Модуль 9: Литеральные типы
Название Упражнений Просмотры Важность Сложность Популярность Актуальность String Literal Types 7 17 95 25 95 100 Number Literal Types 7 23 80 25 70 100 Boolean Literal Types 6 29 70 25 55 95 Литеральные Union типы 7 21 100 30 100 100 as const утверждение 5 26 85 40 80 100 ← Прокрутите таблицу горизонтально →
Модуль 10: Type Aliases
Название Упражнений Просмотры Важность Сложность Популярность Актуальность Создание Type Alias 6 36 100 15 100 100 Type Alias для объектов 8 22 100 20 100 100 Type Alias для Union типов 6 21 95 25 95 100 Type Alias для функций 6 26 90 30 85 100 Пересечение типов (Intersection) 8 27 90 40 85 100 ← Прокрутите таблицу горизонтально →
Модуль 11: Интерфейсы
Название Упражнений Просмотры Важность Сложность Популярность Актуальность Объявление интерфейса 9 15 100 20 100 100 Опциональные свойства в интерфейсах 9 19 95 15 100 100 Readonly свойства в интерфейсах 6 17 80 20 75 100 Расширение интерфейсов (extends) 7 23 95 35 95 100 Множественное наследование интерфейсов 7 28 80 40 70 100 Интерфейсы для функций 7 18 75 40 65 95 Declaration Merging 7 32 70 45 55 90 Interface vs Type Alias 7 23 90 35 90 100 ← Прокрутите таблицу горизонтально →
Модуль 12: Type Guards и Narrowing
Название Упражнений Просмотры Важность Сложность Популярность Актуальность typeof guard 8 30 100 25 100 100 Truthiness narrowing 7 22 90 30 95 100 Equality narrowing 7 28 90 30 90 100 in operator narrowing 8 22 85 35 80 100 instanceof guard 6 24 90 30 85 100 Пользовательские Type Guards (is) 5 24 85 55 75 100 ← Прокрутите таблицу горизонтально →
Модуль 13: Enums
Название Упражнений Просмотры Важность Сложность Популярность Актуальность Числовые Enums 7 26 85 25 85 95 Строковые Enums 6 25 90 25 90 100 Гетерогенные Enums 6 24 40 30 20 70 const Enums 6 21 70 40 60 90 Enum как тип 6 21 85 35 85 95 ← Прокрутите таблицу горизонтально →
Модуль 14: Классы
Название Упражнений Просмотры Важность Сложность Популярность Актуальность Типизация свойств класса 6 24 95 25 95 100 Модификатор public 7 26 90 20 90 100 Модификатор private 6 23 95 25 95 100 Модификатор protected 7 28 85 30 80 100 Модификатор readonly в классах 7 25 80 25 75 100 Сокращенная инициализация в конструкторе 7 15 95 30 95 100 Реализация интерфейсов (implements) 7 20 95 40 90 100 Абстрактные классы 9 13 80 45 70 95 Static свойства и методы 7 13 85 30 85 100 Getters и Setters 7 27 80 30 75 95 ← Прокрутите таблицу горизонтально →
Модуль 15: Generics — основы
Название Упражнений Просмотры Важность Сложность Популярность Актуальность Введение в Generics 5 16 100 50 100 100 Generic функции 8 28 100 45 100 100 Несколько типовых параметров 6 23 90 50 90 100 Generic интерфейсы 5 22 95 50 95 100 Generic Type Aliases 7 25 90 45 90 100 Generic классы 7 20 85 55 80 100 ← Прокрутите таблицу горизонтально →
Модуль 16: Generics — ограничения
Название Упражнений Просмотры Важность Сложность Популярность Актуальность Generic Constraints (extends) 6 24 95 55 95 100 Использование keyof с Generics 7 17 90 60 90 100 Значения по умолчанию для Generic 7 16 75 50 70 100 ← Прокрутите таблицу горизонтально →
Модуль 17: Utility Types — базовые
Название Упражнений Просмотры Важность Сложность Популярность Актуальность Partial 7 22 100 35 100 100 Required 7 17 85 35 80 100 Readonly 7 18 90 30 85 100 Pick 7 22 95 40 95 100 Omit 8 9 95 40 95 100 Record 7 30 95 45 95 100 ← Прокрутите таблицу горизонтально →
Модуль 18: Utility Types — работа с Union
Название Упражнений Просмотры Важность Сложность Популярность Актуальность Exclude 7 21 85 50 80 100 Extract 7 21 80 50 75 100 NonNullable 7 24 90 35 90 100 ← Прокрутите таблицу горизонтально →
Модуль 19: Utility Types — функции
Название Упражнений Просмотры Важность Сложность Популярность Актуальность ReturnType 7 20 90 45 90 100 Parameters 7 20 85 45 80 100 Awaited 7 15 80 50 75 100 ← Прокрутите таблицу горизонтально →
Модуль 20: Type Assertions
Название Упражнений Просмотры Важность Сложность Популярность Актуальность Утверждение типа (as) 8 22 95 35 100 100 Угловые скобки () 8 20 70 30 50 80 Non-null assertion (!) 7 31 90 40 90 100 as const 9 43 85 45 85 100 Двойное утверждение (as unknown as T) 6 16 65 50 55 90 ← Прокрутите таблицу горизонтально →
Модуль 21: Keyof и Typeof операторы
Название Упражнений Просмотры Важность Сложность Популярность Актуальность Оператор keyof 7 27 95 45 95 100 Оператор typeof в типах 6 15 90 40 90 100 Комбинация keyof typeof 6 21 90 50 90 100 Indexed Access Types 7 21 85 55 85 100 ← Прокрутите таблицу горизонтально →
Модуль 22: Mapped Types
Название Упражнений Просмотры Важность Сложность Популярность Актуальность Основы Mapped Types 7 21 85 65 80 100 Модификаторы в Mapped Types (+, -) 7 17 75 70 65 95 Key Remapping (as) 6 21 70 75 60 95 ← Прокрутите таблицу горизонтально →
Модуль 23: Conditional Types
Название Упражнений Просмотры Важность Сложность Популярность Актуальность Основы Conditional Types 7 16 85 70 80 100 Distributive Conditional Types 8 20 70 80 60 95 Ключевое слово infer 8 21 80 85 75 100 ← Прокрутите таблицу горизонтально →
Модуль 24: Discriminated Unions
Название Упражнений Просмотры Важность Сложность Популярность Актуальность Паттерн Discriminated Union 7 22 95 50 95 100 Exhaustiveness checking 7 18 85 55 80 100 Switch с Discriminated Unions 6 13 90 45 90 100 ← Прокрутите таблицу горизонтально →
Модуль 25: Модули и типы
Название Упражнений Просмотры Важность Сложность Популярность Актуальность Export типов и интерфейсов 7 22 100 25 100 100 Import типов 6 22 100 25 100 100 import type синтаксис 6 33 85 30 85 100 Re-export типов 10 22 75 35 70 95 ← Прокрутите таблицу горизонтально →
Модуль 26: Declaration Files
Название Упражнений Просмотры Важность Сложность Популярность Актуальность Что такое .d.ts файлы 7 24 85 50 85 100 Declare keyword 7 18 80 55 75 95 @types пакеты 7 20 95 30 95 100 ← Прокрутите таблицу горизонтально →
Модуль 27: Типизация асинхронного кода
Название Упражнений Просмотры Важность Сложность Популярность Актуальность Типизация Promise 8 22 100 40 100 100 Async/await с типами 8 14 100 35 100 100 Promise.all типизация 7 21 85 50 85 100 ← Прокрутите таблицу горизонтально →
Модуль 28: Практические паттерны
Название Упражнений Просмотры Важность Сложность Популярность Актуальность Типизация событий DOM 7 23 90 45 95 100 Типизация fetch запросов 8 25 95 50 100 100 Типизация JSON данных 8 48 90 45 95 100 Типизация localStorage 7 18 80 40 85 100 ← Прокрутите таблицу горизонтально →