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在这个例子中正确输入?

- 编辑 -

如果您想看到警告,您需要reportUnknownTypes按照此处true的说明进行设置。我试图达到 100% 键入的代码,但我认为对于那个简单的程序我无法达到这个目标。

4

2 回答 2

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

没有指定“this”类型,所以它是未知的。要以这种方式指定它,您需要使用:

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

使用“@param {number}”可以让编译器根据它在 F 的原型上声明的事实来推断“this”类型。

于 2013-08-27T01:05:24.060 回答
1

您似乎需要使用@param {number} b而不是@type {function(number)}。使用 @param 键入不会引发警告。没有多大意义,但它有效:

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

--

原答案:

我认为这是因为您没有在构造函数中键入 a 。尝试这个:

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

    /**
     * @type {number}
     * @private
     */
    this.a = 0;
};
于 2013-08-25T13:36:45.697 回答