У меня есть Обещание, значением разрешения которого является сложный Объект.Я хотел бы создать тип 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)», но я бы не хотел этого делать, если это возможно.