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如何能夠理解這兩種方法。