Обработчик событий заказа обращается к полю reason у события оплаты
type OrderEvent = {
type: string;
orderId: string;
total?: number;
reason?: string;
};
function handle(e: OrderEvent) {
if (e.type === 'order_cancelled') notifyCancel(e.orderId, e.total!); // перепутали поле
}
Компилятор не заметил, что у отмены берётся total вместо reason. Как описать события, чтобы такое не компилировалось?
- Размеченное объединение с литеральным полем type
- Сделать все поля обязательными
- Заменить string на enum в поле type
- Убрать восклицательный знак после total
