代码之家  ›  专栏  ›  技术社区  ›  Chacha

不同文件中定义的对象的JSdoc

  •  3
  • Chacha  · 技术社区  · 7 年前

    A、 js公司

    function put(persons) {
    }
    

    实体。js公司

    function Person(name) {
       this.name = name;
       this.age = 10;
    }
    

    现在,在A.js中,当我为方法put编写JSdoc时,我应该为person输入什么类型?理想情况下应该是{Person[]},但我不知道应该如何引用,因为它存在于不同的文件中。有一种方法可以要求实体。js文件类似:-

    var Person = require('./entities').Person;
    

    然后如果我做{Person[]},它可以工作,但我只想为JSDoc导入定义?这是唯一的办法吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   zero298    7 年前

    你会认为这看起来很可怕,但你可以做到 @param {module:someModule/SubModule~ExportedClass} :

    我的类型。js公司

    /**
     * A dummy type module
     * @module myModule/MyType
     */
    
    /**
     * Dummy type
     */
    class MyType {
        /**
         * Creates a MyType
         * @param {Number} foo Some var
         * @param {Number} bar Some other var
         */
        constructor(foo, bar) {
            this.foo = foo;
            this.bar = bar;
        }
    }
    
    module.exports = MyType;
    

    一些代码使用 MyType

    /**
     * Test
     * @inner
     * @param {module:myModule/MyType~MyType} c The caption
     */
    function test(c){
        console.log(c);
    }
    

    这会给你这样的东西:

    JSDoc output


    需要注意的关键是,您需要真正明确地使用JSDoc。该文档提供了一个注释,详细说明了如何使用 module:MODULE_NAME 此处的语法: CommonJS Modules: Module identifiers .

    在大多数情况下,您的CommonJS或Node。js模块应包括 包含 @module tag . 这个 @模块 标签的值 应该是传递给 require() 作用例如,如果用户通过调用 require('my/shirt') ,您的JSDoc注释将包含标记 @module my/shirt .

    如果您使用 @模块 没有值的标记,JSDoc将尝试猜测 基于文件路径的正确模块标识符。

    当您使用JSDoc时 namepath 参考 模块,您必须添加前缀 module: . 例如,如果您需要模块的文档 my/pants 链接到模块 my/shirt ,您可以使用 @see tag 到文档 我的/裤子 像 跟随:

    下面是另一个使用精确文件和其他 @模块

    实体。js公司

    /**
     * Person Module
     * @module Person
     */
    
    /**
     * Creates a person
     * @class
     */
    function Person(name) {
        this.name = name;
        this.age = 10;
    }
    
    module.exports = {
        Person: Person
    };
    

    A、 js公司

    var Person = require("./entities").Person;
    
    /**
     * Module for putting people somewhere
     * @module A
     */
    
    /**
     * Does something with persons
     * @param {module:Person~Person[]} persons Some people
     */
    function put(persons) {}
    
    module.exports = {
        put: put
    };
    

    精确文件示例渲染

    JSDoc Rendering with Exact Files