介绍:JSDoc 3 是一个用于 JavaScript 的API文档生成器,类似于 Javadoc 或 phpDocumentor。可以将文档注释直接添加到源代码中。JSDoc 工具将扫描您的源代码并为您生成一个 HTML 文档网站。
说明:这里介绍的是把注释以一种类型文档的显示 做标注,不是普通的做个 文本描述。所以 JSDoc 的功能 和 typescript 的 类型描述文件的功能差不多。
参考:https://juejin.cn/post/7112831769736380430
一、常规:
- 可选参数:
@param {type} [p]
可选参数@param {type=} p
可选参数
/** * demo * @param {string} a * @param {string} [b] * @param {boolean=} c */ function foo(a, b, c) {}
- 参数默认值:
@param {type} [p=defaultValue]
参数默认值
/** * demo * @param {string} a * @param {string} b * @param {boolean} [c=false] */ function foo(a, b, c) {}
二、复杂的类型 注解:
- 数组结构:
当参数为数组时可以做到对其每个元素进行详细描述,格式如下/** * 数组参数: * @param {array} arr 参数描述 * @param {string} arr[0] 参数描述 * @param {number} [arr[1]=undefined] 参数描述 */
- 对象结构:
/** * demo * @param {{name: string, age: number}} a * @returns {number} */ function foo(a) { return 2; }
上面的这种写法,会让维护者不解其中的意思。一时不知道name和age是什么意思。可以采用另一种描述
Object
中各项的描述,如下【推荐】/** * demo * @param {Object} a * @param {string} a.name 回复人的名字 * @param {number} a.age 回复人的年龄 * @returns {number} */ function foo(a) { return 2; }
三、自定义类型:
有些时候我们可能需要使用复用一些结构体,可以使用 JSDoc
封装,如下
/** * 包含姓名和年龄的对象 * @typedef {Object} Person * @property {string} name - 姓名 * @property {number} age - 年龄 */ /** * @type {Person} person */ const person = { name: 'steven', age: 21 }
说明:自定义类型 类似ts的接口,多个地方复用这个对象类型时。自定义类型就非常好用。
- 定义方法:定义类型用 @typedef
/** * @typedef {Object} Person * @property {string} name how the person is called * @property {number} age how many years the person lived */
使用时,直接把定义的类型 当作原生的类型那样使用
/** * @param {Person} p - Description of p */
- 对于值都是相同类型的对象:数组对象中用的应该比较多。
/** * @param {Object.<string, number>} dict */
- 描述函数返回值结构:如果函数返回值是一个普通对象哪个
四、跨文件使用
// ./@types/index /** * 包含姓名和年龄的对象 * @typedef {Object} Person * @property {string} name - 姓名 * @property {number} age - 年龄 */ /** * @type {Person} Person */
// ./t.js /** * @typedef {import('./@types/index').Person} */ /** * demo * @param {Person} a * @returns */ function foo(a) { return 2; }
总结:
JSDoc
在复用这方面,就不如 typescript
好用了,说实话,如果你的项目都需要用到这种类型了,应该尽快考虑是否应该使用 typescript
,JSDoc
的生态方面还是比不过 typescript
的,而且两者写法差距蛮大,一旦写得多了,调头比较难。
五、接口:
接口 API
的注释还是挺重要的,如果 JSDoc
能用在这上面还是挺方便的,其示例如下
/** * demo * @returns {Promise<{data:{name: string, age: number}}>} */ function foo() { return new Promise((resolve, reject) => { resolve({ data: { name: "steven", age: 21 } }); }); }
总结:偶尔使用 JSDoc
写点简单的注释还行,但是复杂的项目和类型,JSDoc
和它的生态未必能够撑得住。
标签:string,number,param,Person,JSDoc,jsdoc,name From: https://www.cnblogs.com/wfblog/p/18315837