Объекты, объединения, пересечения, интерфейсы
Цель: в основах объектно-ориентированного программирования попробовать работу с объединениями, пересечениями типов и интерфейсов.
Порядок выполнения лабораторной работы:
Используйте окружение и репозиторий из прошлой работы. В этой работе предлагается реализовать часть объектов из LMS (Системы управления обучением).
Пользователи
Создайте тип пользователя с идентификатором, который можно только читать, именем и электронной почтой.
Студент имеет дополнительное поле “год поступления”.
Преподаватель имеет дополнительное поле “ученая степень”: отсутствует, к.н., д.н..
Напишите код для создания объектов пользователя, которая принимает объект соответствующий студенту или преподавателю без идентификатора в качестве параметра, а возвращает соответствующий объект курса со случайно сгенерированным идентификатором.
Курсы
Создайте тип курса с идентификатором только на чтение, названием, опциональным лимитом студентов на одного преподавателя, статусом (черновик, архивный, активный), записанными студентами и преподавателями.
Методы для публикации и архивации курса.
Метод для добавления пользователя к курсу.
Напишите код для создания объектов курса, которая принимает объект соответствующий курсу без идентификатора в качестве параметра и со статусом черновик, а возвращает объект курса со случайно сгенерированным идентификатором.
Функции
Создайте функцию для вывода информации о пользователе, которая принимает любого пользователя в качестве параметра и возвращает строку с именем пользователя и либо годом поступления (для студентов), либо степенью (для преподавателей).
Напишите функцию для вывода среднего количества студентов на курсах.
Напишите функцию для вывода количества кандидатов и докторов наук ведущих курсы.
Напишите функцию, которая выводит информацию о всех пользователях курса в алфавитном порядке.
Написание кода для проверки работоспособности
Напишите код, который создает пользователей, курсы, объединяет их в массивы, добавляет пользователей на курсы, чтобы протестировать логику работы ваших функций, классов, объектов.
Github
Зафиксируйте результаты работы с помощью системы контроля версий git в репозиторий на github. Отправьте коммиты на ваш репозиторий в Classroom.
Требования
- Реализованы все функции, классы, типы аннотированы.
- Код компилируется и нет замечаний от ESLint.
Результат выполнения
Код удовлетворяющий требованиям сохраненный в коммите на удаленном репозитории.
Источники для занятия
Основные источники по TS
- The TypeScript Handbook
- Типизация - лекция от яндекса
- Типизация продвинутый - лекция от яндекса
- Справочник Typescript (не последняя версия)
- Серия статей Изучение TypeScript
- Курс TypeScript
Вопросы для защиты
- Преимущества строгой системы типов
- Недостатки строгой системы типов
- Использование типов и интерфейсов
- Пересечение и объединение объектов
- Форма объекта и структура типа
- Как используются
object
,Object
и{}
для аннотации типов - Номинативная и структурная типизация
- Сужение типа