2017-09-30 112 views
2

我有一個簡單的ES6類,我想知道如何在JSDoc中正確地描述它。請注意,我想定義我自己的類型,稍後將由WebStorm自動完成識別。如何在JSDoc中正確定義自己的類的類型?

下面的示例有效嗎?

/** 
* @typedef {Object} View 
* @class 
*/ 
class View{...} 

回答

3

這是一個非常好的問題。我今天的做法是在其構造函數中聲明我所有的類實例變量,並用它的預期類型對每個變量進行註釋。這是一個很好的做法,並且與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


但是,有時您甚至不需要申報班級。說,對於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如何能夠理解這兩種方法。

相關問題