2
我有一个简单的ES6类,我想知道如何在JSDoc中正确地描述它。请注意,我想定义我自己的类型,稍后将由WebStorm自动完成识别。如何在JSDoc中正确定义自己的类的类型?
下面的示例有效吗?
/**
* @typedef {Object} View
* @class
*/
class View{...}
我有一个简单的ES6类,我想知道如何在JSDoc中正确地描述它。请注意,我想定义我自己的类型,稍后将由WebStorm自动完成识别。如何在JSDoc中正确定义自己的类的类型?
下面的示例有效吗?
/**
* @typedef {Object} View
* @class
*/
class View{...}
这是一个非常好的问题。我今天的做法是在其构造函数中声明我所有的类实例变量,并用它的预期类型对每个变量进行注释。这是一个很好的做法,并且与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
型,享受自动完成:
如果你尝试将一个错误的类型分配给你的一些属性:
但是,有时您甚至不需要申报班级。说,对于isntance,你期望通过JSON接收一个对象,你需要一些东西。你可以使用纯JSDoc来帮助检查你的代码,而不需要声明一个类。假设你期待这样的JSON:
{
"foo": "bar",
"fizz": 42
}
相反的声明类,这样做,而不是在你的代码的一些地方(我喜欢把它总是在脚本的是要充分利用顶部):
/**
* @typdedef {Object} MyType
* @property {String} foo - this is some cool string
* @property {Number} fizz - some number we also expect to receive
*/
就是这样!亲自尝试一下,看看Webstorm如何能够理解这两种方法。