Опциональные свойства интерфейса в TypeScript

В интерфейсе также можно задавать особые опциональные (необязательные) свойства. Они нужны для того, чтобы не ограничивать объект определенным набором свойств. При этом запрещается использование свойств, которые не входят в интерфейс. Опциональные свойства задаются с помощью оператора ?, указанного после имени свойства.

Давайте создадим интерфейс IFigure, задающий свойства все объектам-фигурам. Пусть color будет опциональным свойством:

typescriptinterface IFigure {
  height: number;
  width: number;
  color?: string;
}

Теперь создадим объект rectangle и выведем значение его цвета в консоль:

typescriptlet rectangle: IFigure = {
  height: 200,
  width: 300,
  color: 'red'
}

console.log(rectangle.color); // 'red'

А теперь проверим будет ли ошибка, если не задать цвет в объекте:

typescriptlet rectangle: IFigure = {
  height: 200,
  width: 300
}

console.log(rectangle.color);

Ошибки не будет и в консоль выведется сообщение о том, что цвет просто не определен:

typescriptundefined
Задание 1

Сделайте интерфейс IDate для объекта, хранящего дату: год, месяц и день. Пусть все свойства объекта будут необязательными.