Функции стрелок не поддерживают перегрузку.Из спецификации языка :
Описания объявлений функций, приведенные в главе 6, также применимы к функциям стрелок, за исключением того, что функции стрелок не поддерживают перегрузку.
Когда вы пишете
foo: {
(args: string): string;
(args: number): number;
}
, вы не перегружаетесь.Вы на самом деле говорите, что foo
- это функция, которая может принимать одну из этих форм (или, скорее, обе формы).Функция стрелки
(args: string | number): string | number =>
нарушает это ограничение, потому что это одна функция (не перегруженная), а string | number
означает, что вы можете вернуть число, когда ожидается строка.
Какуже предложенное artem изменение типа возвращаемого значения на any
или тип пересечения решает проблему.Но это не то же самое, что перегрузка, потому что компилятор не выбирает между сигнатурами.У вас есть только одно: функция стрелки.