Webstorm interface implementation warning using JSDoc

1.2k views Asked by At

I am very new in JSDoc, and I am trying out Webstorm, so I am also very new on webstorm.

I have on one hand an interface declared this way:

/**  @interface */
function IInterface(){}
IInterface.prototype.myMethod = function(){};

On another hand, I am developing a module in which I am implementing this interface:

window.exports.MyImplementation =  (function(){
    "use strict";

    /**
     *
     * @constructor
     * @implements {IInterface}
     */
    function MyImplementation(){}
    MyImplementation.prototype.myMethod = function(){
        // my implementation here
    };

    return MyImplementation;
})();

The problem I have is that the implementation is apparently not recognized: Not implemented warning screen shot

But if I remove the window.exports.MyImplementation assignation or the return statment, there is no more warning...

enter image description here

.. but I do want to return and store my type from my module!

Is there something I am missing or doing wrong?...

Edit:

Just to bring a bit more confusion to my issue, I was considering using a "full annotation" interface declaration (If it is possible, I am experimenting here...):

enter image description here

... but in this case, you can notice that the "I" symbol has disappeared from the left side and if the method is not implemented, I don't have any warning. BUT the type IInterface is recognized.

Edit: I think I just understood something while experimenting other stuffs of jsDoc. The warning is thrown because the check on the implementation is made on the window.exports.MyImplementation. But there is no direct assignation implementing this object in the code. And this is why the warning is disabled when I remove the return statement or the "exports.MyImplementation" assignation.

.. thus, not sure this could be considered as a bug, this may be the pattern I used for my module that doesn't match to the pattern expected by WebStorm and maybe also by the JSdoc itself...... If someone who has experience in JSDoc and Webstorm could confirm.....

Another edit: (significant step here in understanding JSDoc I think)

The annotations have been moved on the targeted field and... tadaaa (notice the "I" which is still here indicating the interface is indeed implementing).

enter image description here

My explanation: There could be a logic behind that.... but honestly I really don't know if it is relevant: as the documented field will be exported in "exports.MyImplementation" at the very end, and this is evident the annotation is more useful here than in the private enclosure. WebStorm has detected the exportation to "exports.MyImplementation", thus is waiting for the documentation on it...

Does it make sense?...

And another edit (again) Investigation, investigation.

I have found a quite different solution that allows documentation, completion, validation and no warning, which seems to me a better solution for module exportation: enter image description here

1

There are 1 answers

2
lena On BEST ANSWER

it's a bug in WebStorm JSDoc support, please vote for WEB-14202