У меня проблемы с документированием следующего (упрощенный пример):
/**
* @typedef Stack
*
* ??what goes here??
*/
/**Creates new stack object
*
* @param {Object} concur
* @param {Queue} concur.queue
* @returns {Stack}
*/
function makeStack ({ queue }) {
return Object.freeze({
// I want these to appear as stack properties with types described below
add,
pull,
remove,
})
/**Adds member to stack
*
* @param {Object} member
*/
async function add(member) {
return await queue.push(member)
}
/**Pulls the most recent member from stack */
async function pull() {
return await queue.pull()
}
/**Removes target member from stack
*
* @param {Object} member
*/
async function remove(id) {
return await queue.findAndRemove({ id })
}
}
Я пытался использовать @lends безуспешно, я пытался найти способ ссылки all , pull , удалить типы функций непосредственно в @typedef, опять же без успеха. Может кто-нибудь объяснить, возможно ли использовать JSDo c таким образом? Что я хочу получить при проверке типа стека:
type Stack = {
add: (member: any) => any,
pull: () => any,
remove: (id: number) => any
}