03

Objects, unions, intersection, interfaces

Объекты, объединения, пересечения, интерфейсы

Цель: в основах объектно-ориентированного программирования попробовать работу с объединениями, пересечениями типов и интерфейсов.

Порядок выполнения лабораторной работы:

Используйте окружение и репозиторий из прошлой работы. В этой работе предлагается реализовать часть объектов из LMS (Системы управления обучением).

Пользователи

Создайте тип пользователя с идентификатором, который можно только читать, именем и электронной почтой.

Студент имеет дополнительное поле “год поступления”.

Преподаватель имеет дополнительное поле “ученая степень”: отсутствует, к.н., д.н..

Напишите код для создания объектов пользователя, которая принимает объект соответствующий студенту или преподавателю без идентификатора в качестве параметра, а возвращает соответствующий объект курса со случайно сгенерированным идентификатором.

Курсы

Создайте тип курса с идентификатором только на чтение, названием, опциональным лимитом студентов на одного преподавателя, статусом (черновик, архивный, активный), записанными студентами и преподавателями.

Методы для публикации и архивации курса.

Метод для добавления пользователя к курсу.

Напишите код для создания объектов курса, которая принимает объект соответствующий курсу без идентификатора в качестве параметра и со статусом черновик, а возвращает объект курса со случайно сгенерированным идентификатором.

Функции

Создайте функцию для вывода информации о пользователе, которая принимает любого пользователя в качестве параметра и возвращает строку с именем пользователя и либо годом поступления (для студентов), либо степенью (для преподавателей).

Напишите функцию для вывода среднего количества студентов на курсах.

Напишите функцию для вывода количества кандидатов и докторов наук ведущих курсы.

Напишите функцию, которая выводит информацию о всех пользователях курса в алфавитном порядке.

Написание кода для проверки работоспособности

Напишите код, который создает пользователей, курсы, объединяет их в массивы, добавляет пользователей на курсы, чтобы протестировать логику работы ваших функций, классов, объектов.

Github

Зафиксируйте результаты работы с помощью системы контроля версий git в репозиторий на github. Отправьте коммиты на ваш репозиторий в Classroom.

Требования

  • Реализованы все функции, классы, типы аннотированы.
  • Код компилируется и нет замечаний от ESLint.

Результат выполнения

Код удовлетворяющий требованиям сохраненный в коммите на удаленном репозитории.

Источники для занятия

Основные источники по TS

Вопросы для защиты

  1. Преимущества строгой системы типов
  2. Недостатки строгой системы типов
  3. Использование типов и интерфейсов
  4. Пересечение и объединение объектов
  5. Форма объекта и структура типа
  6. Как используются object, Object и {} для аннотации типов
  7. Номинативная и структурная типизация
  8. Сужение типа