Перегрузка функций в Typescript
Периодически забываю про альтернативный синтаксис для перегрузки функций в Typescript
, поэтому напишу тут, чтобы не искать-вспоминать, когда понадобится.
В документации описан вот такой вариант:
function position(): number; // получить позицию
function position(index: number): void; // установить позицию
function position(index?: number): number | void {
if (index == undefined) {
return 22;
}
updatePosition(index);
}
Однако, в интерфейсах так может быть не удобно писать, т.к. приходится дублировать имя функции, и запросто можно при рефакторинге переименовать одну и забыть переименовать другую. Особенно прикольно, что совершенно не обязательно они должны быть написаны рядом:
interface I {
position(): number; // получить позицию
// много строк кода
position(index: number): void; // установить позицию
}
Но есть вариант описать атрибут как вызываемый (callable
), тогда имя дублировать не нужно, и можно записать всю конструкцию в одну строку:
interface I {
position: { (): number; (index: number): void }; // получить/установить позицию
}