Композиция функций в Typescript без перегрузок

Попробуйте сохранить результат оператора Select в отдельной переменной, а затем используйте это для запроса на удаление.

1
задан Jaroslav Šmolík 16 January 2019 в 07:58
поделиться

1 ответ

Нет способа убрать все перегрузки. То, как параметры типа R* зависят друг от друга, в настоящее время не выражается в системе типов.

Одним из улучшений, которое мы можем сделать, является устранение необходимости в перегрузках, добавляя дополнительные параметры в первую функцию (те, которые добавляют параметры типа A*). Это можно сделать в 3.0 с использованием кортежей в параметрах покоя

interface LoDashStatic {

    flow<A extends any[], R1, R2>(f1: (...a: A) => R1, f2: (a: R1) => R2): (...a: A) => R2;

    flow<A extends any[], R1, R2, R3>(f1: (...a: A) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3): (...a: A) => R3;

    flow<A extends any[], R1, R2, R3, R4>(f1: (...a: A) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): (...a: A) => R4;

    flow<A extends any[], R1, R2, R3, R4, R5>(f1: (...a: A) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): (...a: A) => R5;

    flow<A extends any[], R1, R2, R3, R4, R5, R6>(f1: (...a: A) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): (...a: A) => R6;

    flow<A extends any[], R1, R2, R3, R4, R5, R6, R7>(f1: (...a: A) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): (...a: A) => R7;

}

declare const _: LoDashStatic;

let f = _.flow((n: number, s: string) => n + s, o => o.toUpperCase()); // f: (n: number, s: string) => string
0
ответ дан Titian Cernicova-Dragomir 16 January 2019 в 07:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: