Я пытаюсь использовать async от filter, которая из документа для v1.5.2 (та, которую вы получаете по умолчанию, если вы npm i async
), принимает единственное (логическое) значение для обратного вызова в итераторе:
iterator(item, callback) — тест на истинность, применяемый к каждому элементу в arr. Итератору передается callback(truthValue), который должен быть вызван с логическим аргументом после его завершения.
Я проверил код, и он верно для этой версии.
Проблема в том, что релиз-кандидат, над которым работает async v2, кажется, меняет это, чтобы использовать обычный обратный вызов (ошибка, значение). Это последнее определение используется в определениях типов для async в DefinitelyTyped:
interface AsyncBooleanIterator<T> { (item: T, callback: (err: string, truthValue: boolean) => void): void; }
// ...
filter<T>(arr: T[], iterator: AsyncBooleanIterator<T>, callback?: AsyncResultArrayCallback<T>): any;
Что происходит? Я не могу выпустить PR, потому что текущие определения типов — это будущее асинхронности. Но я получаю сообщение об ошибке, используя асинхронность, как я полагаю для версии 1.5.2. Существуют ли разные версии, к которым я могу получить доступ для определений типов DefinitelyTyped?
Я начинаю с Typescript и слышал о чем-то, что называется слиянием. По-видимому, можно расширить определение AsyncBooleanIterator
, чтобы оно также могло принимать обратный вызов с одним логическим аргументом… но я не уверен, как это сделать. Любая помощь будет оценена по достоинству.