Практика №13. Социальная сеть - Часть 2. Миграция на TypeScript

Общее описание

Переписать одностраничное веб-приложение (SPA), разработанное в рамках задания №12, с использованием TypeScript вместо JavaScript. Проект должен по-прежнему быть основан на React + Vite, использовать статические mock-данные, и сохранять всю функциональность, реализованную ранее. Все компоненты, хуки, утилиты и маршруты должны быть типизированы. Репозиторий на GitHub должен называться: Group_LastName_task-13 (или, перенести прошлую версию на ветку "javascript" и продолжать работать в Group_LastName_task-12).

Это не просто добавление расширения .ts — необходимо корректно использовать систему типов TypeScript для повышения надёжности и читаемости кода.


Ресурсы

(пусто)


Требования к реализации

1. Структура проекта

  • Использовать ту же архитектуру, что и в задании №12.
  • Все файлы с логикой должны иметь расширение .tsx или .ts.
  • Разделение на компоненты, хуки, утилиты и типы должно быть сохранено или улучшено.

2. Типизация данных

  • Создать интерфейсы или типы для всех сущностей из ER-диаграммы:
    • User
    • Post
    • Comment
    • Like
    • Friendship
  • Использовать эти типы во всех компонентах, хуках и утилитах.
  • Все mock-данные должны быть импортированы с корректной типизацией (например, через as const или явное указание типа).

3. Хуки и утилиты

  • Все пользовательские хуки (useAuth, usePosts, useComments и т.д.) должны быть полностью типизированы.
  • Функции-утилиты (поиск, фильтрация, обновление состояния) должны принимать и возвращать значения с чётко определёнными типами.

4. React Router

  • Все маршруты и параметры (например, userId в URL) должны быть типизированы.
  • Использовать useParams, useNavigate и другие хуки с учётом типов.

5. Состояние приложения

  • Состояния (useState, useReducer) должны иметь явно заданные типы.
  • Избегать использования any или unknown без веской причины.

6. Сохранение функциональности

  • Всё, что работало в задании №12, должно работать и здесь:
    • Авторизация/выход
    • Просмотр постов, профилей, комментариев
    • Создание/редактирование/удаление постов и комментариев
    • Лайки, заявки в друзья, поиск
    • Переключение темы (если была реализована)
    • Страница 404
    • При желании можно доработать то что не удалось в рамках №12 задания.

7. Ограничения

  • Нужно минимально использовать // @ts-ignore или отключать проверки TypeScript без крайней необходимости.
  • Запрещено оставлять неявную типизацию (implicit any).
  • Разрешено использовать только те библиотеки, которые уже были в проекте №12 (включая react-router-dom).

Время на выполнение

2 практические сессии

  • После сессии 1 дедлайн: 75% от максимального балла
  • После сессии 2: 50%
  • После сессии 3: 25%
  • После сессии 3: 25%

Баллы

Статус выполнения Количество баллов
Не сдано -10
Полностью реализовано 5-15
Дополнительная часть (пусто)