Использование интерфейсов и функций стрелок
// a.ts
export interface Foo {
// overloads here...
(a: string): string
(): any
}
// b.ts
import {Foo} from './a'
const foo: Foo = (...args: any[]) => ...
foo()
PS. Вы не можете делать это с классическими функциями, потому что в этом случае перегрузки функций должны быть размещены непосредственно перед реализацией.