如何在JSDoc中正确定义自己的类类型?

8
我有一个简单的ES6类,想知道如何在JSDoc中正确描述它。请注意,我想定义自己的类型,并且希望WebStorm自动完成后能够识别该类型。
下面的示例是否有效?
/**
* @typedef {Object} View
* @class
*/
class View{...}
1个回答

18

那是一个非常好的问题。我今天的做法是在构造函数中声明所有类实例变量,用其预期类型进行注释。这是一个很好的惯例,并且在Webstorm中非常有效。例如:

class MyClass {

    constructor () {
        /** @type {Number} some number value */
        this.someNumber = 0;
        /** @type {String} some relevant string */
        this.someString = null;
        /** @type {Map<Number, Set<String>>} map numbers to sets of strings */
        this.strSetByNumber = new Map();
    }

    /**
     * Some sample function.
     * 
     * @param {Number} a - first value
     * @param {Number} b - second value
     * @return {Number} the resulting operation
     */
     someFunction(a, b) {
         return a + b;
     }
}

现在只需声明一些变量为MyClass类型,并享受自动补全功能:

auto-completion

如果您尝试将错误类型分配给某些属性:

enter image description here


然而,有时您甚至不需要声明一个类。比如说,您希望通过JSON接收一个对象并对其进行处理。您可以使用纯JSDoc来帮助检查代码,无需声明一个类。假设您期望接收如下JSON:

{
    "foo": "bar",
    "fizz": 42
}

不要声明一个类,而是在代码的某个地方使用以下方式(我喜欢将其放在将使用它的脚本的顶部):

代替声明类,这样做会更好。在代码的某个位置(我喜欢把它放在将要使用该类的脚本的顶部)使用以下语句:

/**
 * @typedef {Object} MyType
 * @property {String} foo - this is some cool string
 * @property {Number} fizz - some number we also expect to receive
 * @property {Number} [bar] - an optional property
 */

就是这样了!你可以自己尝试一下,看看Webstorm如何完美理解这两种方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接