如何指定"这个"的类型? JetBrains IDE中的闭包值?

时间:2016-05-09 10:51:22

标签: javascript jquery callback phpstorm webstorm

JetBrains有一篇关于JSDoc注释的老博文,解释了如何通知IDE变量类型http://blog.jetbrains.com/webide/2012/10/validating-javascript-code-with-jsdoc-types-annotations/

但是,我仍然无法找到一种方法来告诉IDE#34;这个"许多jQuery回调中的值是HTMLElements。例如:

/**
 * Enable input
 * @returns {SomeConstructor}
 */
SomeConstructor.prototype.enableInput = function(){
    this.$markup.find('input').each(function(){
        this.disabled = false;
    });
    return this;
};

上面的例子仍然会在IDE中产生警告 - "可能无效使用此"。

enter image description here 我如何指定"这个"是指一个HTMLElement对象?

编辑:

在查看JSDoc文档后,我找到了@this注释http://usejsdoc.org/tags-this.html。 @this将允许你指定一个"这个"整个函数的值,但在发布的示例中,IDE会认为它返回的是HTMLElement而不是SomeConstructor。

1 个答案:

答案 0 :(得分:1)

@ de1mar在评论中钉了它。诀窍是在关闭之前放置/ ** @ this {HTMLElement}。所以,例如:

/**
 * Enable input
 * @returns {SomeConstructor}
 */
SomeConstructor.prototype.enableInput = function(){
    this.$markup.find('input').each(/**@this {HTMLElement}*/function(){
        this.disabled = false;
    });
    return this;
};

或者,

SomeConstructor.prototype.listenForCheck = function(){
    this.$markup.find('input[type=checkbox]').on('click', /**@this {HTMLInputElement}*/ function(){
        //Do something
    });
};

对于那些在jetbrains IDE中编写jQuery的人来说应该是有用的。谢谢@ del1mar!