2013-08-24 33 views
0

我不能得到正確鍵入下面的代碼:正確地關閉編譯器類型的實例變量

/**                                              
* @constructor                                           
*/ 
function F() { 
     this.a = 0; 
}; 

/**                                              
* @type {function(number)}                                        
*/ 
F.prototype.g = function(b) { 
    this.a += b; 
}; 

我得到以下警告:

test.js:12: WARNING - could not determine the type of this expression 
    this.a += b; 
    ^

我怎樣才能正確地輸入這個this例?

- 編輯 -

如果你想看到警告時,您需要設置reportUnknownTypestrue的解釋here。我試圖獲得100%的類型代碼,我想我無法達到那個簡單的程序。

回答

2
/** @type {function(number)} */ 

所以它是未知的未指定的「本」的類型。要以那種方式指定它你想使用:

/** @type {function(this:F, number)} 

使用「@param {}號」讓編譯器推斷它被宣佈F上的原型其實是「本」的類型。

+0

太棒了,現在很有意義。 –

1

您似乎需要使用@param {number} b而不是@type {function(number)}。用@param鍵入不會引發警告。不作一大堆的道理,但它的工作原理:

/**                                              
* @param {number} b                                        
*/ 
F.prototype.g = function(b) { 
    this.a += b; 
}; 

-

原來的答覆:

我想這是因爲你在構造函數中沒有輸入。試試這個:

/**                                              
* @constructor                                           
*/ 
function F() { 

    /** 
    * @type {number} 
    * @private 
    */ 
    this.a = 0; 
}; 
+0

謝謝,但它也沒有工作。我讀到你不需要在變量定義中輸入本地類型(這就是爲什麼我跳過'@type {number}',至於'@ private',我認爲沒有必要。 –

+0

你是對的,我已經更新了我的答案,希望它有幫助 – RoryKoehein

+0

謝謝!沒有太大的意義我完全同意,我永遠不會找到 –