Что делать, если определения типов DefinitelyTyped предназначены для более новой версии, чем та, которую я хочу?

Я пытаюсь использовать 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, чтобы оно также могло принимать обратный вызов с одним логическим аргументом… но я не уверен, как это сделать. Любая помощь будет оценена по достоинству.


person justin    schedule 20.06.2016    source источник


Ответы (1)


Вы можете использовать одну из предыдущих версий — просмотрите историю и выберите соответствующую фиксацию.
Если вы хотите вручную разрешить обе сигнатуры обратного вызова, вы можете сделать что-то вроде этого:

interface AsyncBooleanIterator<T> {
    (item: T, callback: ((truthValue: boolean) => void) | ((err:string,truthValue:boolean) => void)): void;
}
person Aleksey L.    schedule 20.06.2016
comment
Привет Алексей! Итак, вы предлагаете выбрать фиксацию во всей истории DefinitelyTyped, когда async.d.ts имеет определение v1.5.2 для фильтра и загрузить его вручную в моем проекте? Так ли работают люди с DefinitelyTyped? (Я перешел на [email protected] - проще). Что касается AsyncBooleanIterator, я знаю, как можно определить этот тип для соответствия старой версии. Но как заставить его действовать? Если я просто добавлю это в свой файл, это не сработает. Как я могу каким-то образом расширить/объединить это определение типа, которое находится в typings/globals/async/index.d.ts, из моих файлов ts? - person justin; 21.06.2016
comment
В typings.json вы можете указать требуемый идентификатор коммита. Например: "ng-file-upload": "github:DefinitelyTyped/DefinitelyTyped/ng-file-upload/ng-file-upload.d.ts#41f8573534b0fff88707d0a4cb870456b50cd43b" - person Aleksey L.; 21.06.2016
comment
Спасибо, я этого не знал :) Знаете ли вы, как можно расширить AsyncBooleanIterator из-за пределов файла DefinitelyTyped? (на будущее) - person justin; 21.06.2016
comment
Не уверен, что это можно сделать извне, потому что этот файл d.ts является модулем. Вы можете вручную редактировать определения, но это довольно неприятно. Я думаю, что использование соответствующей версии - это путь. - person Aleksey L.; 21.06.2016