Javascript 如何用JSDoc记录useState钩子?

Javascript 如何用JSDoc记录useState钩子?,javascript,jsdoc,Javascript,Jsdoc,我试图使用JSDoc来记录我的react状态钩子的分解部分,例如: const[referenceState,setReferenceState]=useState(null); 这里,referenceState是Object类型,而setReferenceState需要一个Object 根据网上的一些信息,我正试图做以下几点: /** *@param{Object}stateToSet *@返回{GenericArray}当前状态和函数以更改值 */ 常量[referenceState,s

我试图使用JSDoc来记录我的react状态钩子的分解部分,例如:

const[referenceState,setReferenceState]=useState(null);
这里,
referenceState
是Object类型,而
setReferenceState
需要一个Object

根据网上的一些信息,我正试图做以下几点:

/**
*@param{Object}stateToSet
*@返回{GenericArray}当前状态和函数以更改值
*/
常量[referenceState,setReferenceState]=useState(null);
但这并没有产生任何效果


有人能帮我记录
referenceState
setReferenceState

我想你可以试试这种方法:

/**
 * @typedef {Object} ReferenceState
 */

/**
 * @callback ReferenceStateSetter
 * @param {ReferenceState} state
 * @returns {void}
 */

/**
 * @namespace {Object}
 * @property {ReferenceState} 0
 * @property {ReferenceStateSetter} 1 
 */
const [referenceState, setReferenceState] = useState(null);
或者,为了避免必须记录立即解构的数组,但受益于在末尾添加一些缩进更改:

/**
 * @typedef {Object} ReferenceState
 */

/**
 * @callback ReferenceStateSetter
 * @param {ReferenceState} state
 * @returns {void}
 */

const [
    /**
     * @type {ReferenceState}
     */
    referenceState,

    /**
     * @type {ReferenceStateSetter}
     */
    setReferenceState
] = useState(null);
如果您不想拥有用于
引用state
的文档,可以去掉它的
@typedef
,用
对象替换对它的引用,但我认为拥有文档更清晰


上面的
void
是一种更简单的方法,表示不返回任何特殊内容(即
undefined
)——如果setter返回的是该内容。有些项目只会删除
@returns
,如果它只返回
未定义的
,但我想添加它以显示返回值是已知的
未定义的
,而不仅仅是未记录的。

在webstorm中,您可以这样写(我没有在其他编辑器中测试它):

const[state,setState]=useState(/**@type{{{{name:string,age:number?}}*/null)

/**
*@typedef人
*@property{string}name
*@property{number}[年龄]
*/
//........
const[state,setState]=useState(/**@type{People}*/null)

另一种选择是,可以在分解结构之前声明变量,并像往常一样使用JSDoc进行注释

/**
* Current state.
* @type {Object}
*/
let referenceState;
/**
* Current state setter.
* @type {Function}
* @param {any} state updated state value.
* @returns void
*/
let setReferenceState;
[referenceState, setReferenceState] = useState(null);

什么类型是
referenceState
?一个物体?那么,什么参数是
setReferenceState
期望并返回的呢?@BrettZamir很抱歉,我没有添加这些详细信息。我已经编辑了这个问题。您是对的,
referenceState
是一个对象,而
setReferenceState
需要一个对象。