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