Когда я имею дело с библиотечным / сторонним кодом, я знаю, что довольно просто справиться с набором универсальных универсальных функций. Например, функция zipWith
для lodash
в flow-typed
на Github здесь просто определяет несколько подписей для функции, указав ее несколько раз в блоке declare
для этого модуля.
Однако я не смог определить / подтвердить / получить эту же функциональность, работая с кодом первой стороны, полностью содержащимся в репозитории - и существующие проблемы Github, кажется, предполагают, что это может быть невозможно (например, - https://github.com/facebook/flow/issues/1251 Support variadic generics
), но я не уверен, что я неправильно истолковал, учитывая, что функциональность уже существует с сторонними библиотеками.
Я попытался создать libdefs, как описано в документации https://flow.org/en/docs/libdefs/
, и объявить модули, которые на самом деле являются «локальными» для репо, без особой удачи.
Чтобы проиллюстрировать, чего я пытаюсь достичь, вот пример типов / использования:
// types
declare module 'with-retries' {
declare export function retry<T0>(a0: T0): [Observable<T0>];
declare export function retry<T0, T1>(a0: T0, a1: T1): [Observable<T0>, Observable<T1>];
declare export function retry<T0, T1, T2>(a0: T0, a1: T1, a2: T2): [Observable<T0>, Observable<T1>, Observable<T2>];
// etc...
}
// usage in with-retries.js
export retry = (...observables) => observables.map(o => o.retry(5));
Вещи, которые я пытался без удачи:
- использование абсолютных путей с использованием процесса добавления типов в сторонние библиотеки на основе официальных документов, но вместо этого для внутренних модулей
- «перегрузка» функции с несколькими указанными аргументами (естественно, это не работает, поскольку поток будет жаловаться на определение, уже существующее для данной функции)
Возможно ли это сделать? Заранее спасибо.