文档承诺将值解析为另一个函数的参数

时间:2019-05-27 16:12:12

标签: javascript node.js express visual-studio-code jsdoc

我有一个Promise,其分辨值是一个Complexe对象。我想为此复杂对象创建一个jsdoc类型,而不必重写其中的30多个函数定义。

我将纯JavaScript与vscode结合使用,并使用jsdoc来指导打字稿类型检查器,而无需在打字稿中编译代码。

我具有在其他地方直接将复杂对象作为类型(没有Promise)的函数,因为我使用了express并在中间件中解析了Promise。然后,我想在“ req”中添加promise的值,以便使用中间件在所有路由中都可用。

我知道我可以使用 @typedef {typeof variable} myType通过变量创建类型,但这不允许将Promise<T>的T作为类型。

如果我愿意


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

myType定义明确,但无法从then外部访问。

我尝试了@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)”,但是我不想这样做如果可能的话。

0 个答案:

没有答案