如何使用JSDoc记录useState挂钩?

时间:2020-10-19 12:32:43

标签: javascript jsdoc

例如,我正在尝试使用JSDoc来记录我的反应状态钩子的变形部分:

const [referenceState, setReferenceState] = useState(null);

在这里,referenceState是对象类型,setReferenceState需要一个对象。

根据一些在线信息,我正在尝试采取以下措施:

/**
* @param {Object} stateToSet
* @returns {GenericArray} current state and function to change value
*/
const [referenceState, setReferenceState] = useState(null);

但这不会产生任何东西。

有人可以帮我记录referenceStatesetReferenceState吗?

3 个答案:

答案 0 :(得分:1)

我认为您可以尝试这种方法:

/**
 * @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);

如果您不想拥有ReferenceState的文档,可以摆脱它的@typedef并用Object替换对它的引用,但是我认为拥有文档。

上面的

void是一种更简单的方法,可以说不返回任何特殊内容(即undefined)-如果那是设置者返回的内容。如果仅返回@returns,有些项目会丢弃undefined,但是我想添加它以显示返回值已知为undefined而不只是未记录。

答案 1 :(得分:0)

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

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

/**
 * @typedef People
 * @property {string} name
 * @property {number} [age]
 */

//........

const [state, setState] = useState(/** @type {People} */null)

答案 2 :(得分:0)

作为替代方案,可以在解构之前声明变量并照常使用 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);