1. Подготовка окружения и основы TypeScript для фронтенда
Подготовка окружения и основы TypeScript для фронтенда
Зачем мы начинаем с окружения и TypeScript
Ты хочешь сделать Jira-подобный проект с Drag & Drop и показывать его на собеседованиях. В таком проекте будет много сущностей (доски, колонки, задачи, пользователи, статусы), много взаимодействий (перетаскивание, фильтры, формы), и много мест, где легко ошибиться.
TypeScript помогает ловить ошибки до запуска приложения, а правильное окружение (Node.js, менеджер пакетов, IDE, линтеры) делает разработку быстрой и предсказуемой.
В этой статье мы:
Что установить
Node.js
Node.js нужен, чтобы ставить зависимости и запускать сборку/сервер разработки.
Сайт:
Менеджер пакетов: npm или pnpm
Менеджер пакетов устанавливает зависимости (React, TypeScript, Vite и т.д.).
Если хочешь pnpm:
Сайт:
Git
Git нужен для истории изменений и будущего портфолио на GitHub.
Проверка:
Сайт:
VS Code
Рекомендуемая среда разработки для React.
Сайт:
Рекомендуемые расширения:
Создаём React + TypeScript проект на Vite
Почему Vite:
Создание проекта (выбери один вариант: npm или pnpm).
Вариант с npm
Вариант с pnpm
После запуска открой адрес из консоли (обычно http://localhost:5173).
Ссылки:
Что внутри проекта (минимальная ориентация)
После создания проекта ты увидишь типичную структуру.
src/ — исходники приложенияsrc/main.tsx — точка входа (подключение React-приложения)src/App.tsx — корневой компонентtsconfig.json — настройки TypeScriptpackage.json — зависимости и командыКоманды в package.json называются scripts. Самые важные:
dev — запуск сервера разработкиbuild — сборка в продакшенpreview — локальный просмотр прод-сборкиБаза TypeScript для фронтенда
TypeScript — это JavaScript плюс типы. Браузер TypeScript напрямую не запускает, поэтому код транспилируется в JavaScript (упрощённо: TypeScript-компилятор убирает типы и иногда преобразует синтаксис).
Сайт:
Примитивные типы
Самое частое:
string, number, booleannull, undefinedПример:
Важно: в реальных проектах тип часто выводится автоматически, и явная аннотация не нужна.
Массивы и объекты
Массив строк:
Объект с явно описанной формой:
type и interface: что выбрать
Оба способа описывают форму объекта.
interface удобен для публичных контрактов и расширенияtype удобен для объединений (union), пересечений (intersection) и литеральных типовНа старте можно придерживаться простого правила:
typetype, и interface — важно единообразиеПример с interface:
Литеральные типы и объединения (union)
Во фронтенде часто есть поля с ограниченным набором значений: статус, приоритет, роль.
Плюс такого подхода: ты не сможешь случайно присвоить status: "finished".
Опциональные поля
Иногда поле может быть, а может отсутствовать (например, описание задачи).
description?: string означает: либо string, либо поля нет.
null и undefined в UI
Во фронтенде часто встречается ситуация: данные ещё не пришли.
Когда используешь User | null, TypeScript заставляет обработать случай null.
Функции: типы параметров и результата
Если функция возвращает значение:
Дженерики (generics) на понятном примере
Дженерики полезны, когда функция работает с разными типами, но ты хочешь сохранить типобезопасность.
Пример: взять первый элемент массива.
Сужение типов (type narrowing)
Если переменная имеет тип-объединение, нужно сузить тип проверкой.
Этот паттерн ты будешь постоянно использовать для запросов к API.
TypeScript в React: пропсы и события
Типизация пропсов
Ключевая идея: UI-компонент объявляет контракт, и TypeScript не даст тебе использовать компонент неправильно.
Типизация обработчиков событий (коротко)
Часто TypeScript сам выводит тип события, но иногда полезно знать явный тип.
Базовая настройка качества кода
В пет-проекте для собеседований важно показать инженерный подход: единый стиль, предсказуемые проверки.
ESLint и Prettier
В шаблоне Vite для React TS линтер часто уже есть. Проверить можно так:
Если линта нет, его обычно добавляют отдельно, но в рамках этой статьи достаточно:
lint перед коммитамиОфициальные сайты:
EditorConfig
EditorConfig помогает одинаково форматировать базовые вещи (отступы, переводы строк) во всех редакторах.
Сайт:
Git: минимальный рабочий процесс
1) Инициализируй репозиторий:
2) Сделай первый коммит:
Дальше мы будем делать маленькие логичные коммиты под фичи (доска, колонки, карточки, DnD), чтобы история выглядела профессионально.
Итоги и что дальше
Теперь у тебя:
В следующей статье мы начнём строить основу приложения: структуру src, базовые компоненты, и модель данных для нашей Jira-подобной доски (Board → Columns → Tasks), чтобы потом уверенно прийти к Drag & Drop и работе с состоянием.