Документ обещает разрешить значение как параметр другой функции - PullRequest
0 голосов
/ 27 мая 2019

У меня есть Обещание, значением разрешения которого является сложный Объект.Я хотел бы создать тип jsdoc для этого сложного объекта без необходимости переписывать в нем определение функции 30+.

Я использую чистый javascript с vscode и использую jsdoc для управления средством проверки типов машинописного текста без компиляции кода.в машинописи.

У меня есть функция, которая принимает сложный объект как тип непосредственно (без Promise) в другом месте, потому что я использую экспресс и разрешаю обещание в промежуточном программном обеспечении.Затем я хочу добавить значение обещания в «req», чтобы оно могло использоваться всеми маршрутами с использованием промежуточного программного обеспечения.

Я знаю, что могу использовать @typedef {typeof variable} myType для создания типа из переменной, но этоне разрешать получать T Promise<T> как тип.

Если я это сделаю


myPromise.then(value => {
    /**
        @typedef {typeof value} myType
    */
});

myType хорошо определен, но он не доступен снаружи того.

Я пробовал различные комбинации @global, @namespace, @lends и @typedef без успеха.

В контексте, я хочу сделать

function setupThingAndReturnAPromise() {
    return promise.resolve().then(() => {
        return { //aComplexeObject
            doThing : ...,
            ...,
            //many other function.
        }
        //the type is available here, but not elsewhere.
    })
}

//here, intellisence is able to detect that aPromise is of type "Promise<ComplexeObject>"
const aPromise = setupThingAndReturnAPromise();

function setupMiddleware(req, res, next) {
   APromise.then(importantSetupValue => {
       req.importantSetupValue = importantSetupValue;
       next();
   })
}

/**
*  @param {express.Request & {importantSetupValue : ??}}
*/
function aRoute(req, res, next) {
    req.importantSetupValue.doThing()
}

Единственный способ заставить его работать, который я мог найти, - это заменить все вызовы «setupValue.anything» на «setupValuePromise.then (setupValue => setupValue.anything)», но я бы не хотел этого делать, если это возможно.

...