我有一个js文件,其中包含一组用于修改用户的函数。所有函数都用jsdoc进行了文档化,这样就可以很容易地看到要使用哪些参数以及函数的作用。
然而,我现在想用一个可选的上下文变量来扩展每个函数。所以从这个
/**
* creates a new user object
* @param {string} email
* @param {string} displayName
* @param {string} password
* @returns {User|Error}
*/
function newUser(email, displayName, password)
到这个
/**
* creates a new user object
* @param {string} email
* @param {string} displayName
* @param {string} password
* @param {*} ctx
* @returns {User|Error}
*/
function newUser(email, displayName, password, ctx)
但是由于我有很多函数会使用相同的ctx
变量,我想我可以创建一个包装器,比如这个
function withContext(ctx) {
/**
* @namespace
* @borrows newUser as new
*/
return {
new: (...args) => newUser(...args, ctx),
};
}
它确实起作用,从某种意义上说,正确的函数似乎是用正确的参数调用的,但我似乎无法让IntelliSense在vscode中找到它,这让我认为我可能没有正确地编写jsdoc。
根据vscode的说法,它说new
函数只需要一个any[]
,它当然会这样做,但这不是newUser
的文档所说的,所以我的文档有问题吗?还是根本不可能?
似乎有可能
/**
* @typedef {Object} UserService
* @property {newUser} newUser
*/
/**
* @returns {UserService}
*/
function withContext(ctx) {
return {
newUser: (...args) => newUser(...args, ctx),
};
}
这将";"修复";IntelliSense和文档遵循先前定义的函数newUser