Разбираю раздел про перегрузку функций в ТС. Вроде суть понял, что на все перегрузки должна быть одна комбинированная реализация, которая учитывает все особенности вызова. Однако не понимаю, как правильно собрать итоговый объект. Вот сделал
пример. Работает, но смущает вот что:
1. Я использовал any для объекта, а значит в него кроме нужных свойств можно накидать произвольных.
2. Если переписать как-то так
Рефакторингfunction reserve(from: Date, toOrDest: Date | string, destination?: string): Ticket {
if (toOrDest instanceof Date && destination !== undefined) {
return {
type: "two-way",
from,
to: toOrDest,
destination
}
} else if (typeof toOrDest === 'string') {
return {
type: "one-way",
from,
destination: toOrDest
}
}
throw new Error("Некорректный вызов функции резервирования билета");
}
тогда, во-первых, появляется дублирование кода (свойство from приходится писать в обоих ветках отдельно, хотя оно во всех случаях гарантированно присутствует), а, во-вторых, приходится писать выброс ошибки, что выглядит некрасиво и к тому же в принципе как будто не может случиться, т.е. получается строчка чисто чтобы компилятор не ругался.
Покажите, как сделать канонично с точки зрения программирования на TS?