2017-01-24 11 views
1

У меня есть выделанная функция, где мне нужно перегружать возвращаемую сигнатуру (упрощенный пример):Функция переменной перегрузки

const foo = (bar: string) => (tag: string, children?: string[]) => { 
const foo = (bar: string) => (tag: string, props: Object, children?: string[]) => { 
    // Do something 
}; 

Перегрузки отлично работает с методами класса или объявлением функций с function ключевым словом, но я гавань» t смог получить его для работы с curried функциями.

ответ

3

Вы можете сделать это:

type MyCurriedFunction = { 
    (tag: string, children?: string[]): void; 
    (tag: string, props: Object, children?: string[]): void; 
} 

const foo = (bar: string): MyCurriedFunction => (tag: string, ...args: any[]) => { 
    // do something 
} 

foo("str")("tag", ["one", "two"]); // fine 
foo("str")("tag", {}, ["one", "two"]); // fine 
foo("str")("tag", ["one", "two"], {}); // error 

(code in playground)

+0

Это умный! – marvinhagemeister

 Смежные вопросы

  • Нет связанных вопросов^_^