我有一个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)”,但是我不想这样做如果可能的话。