Предупреждение о реализации интерфейса Webstorm с использованием JSDoc

Я очень новичок в JSDoc, и я пробую Webstorm, так что я также новичок в webstorm.

С одной стороны, у меня есть интерфейс, объявленный таким образом:

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

С другой стороны, я разрабатываю модуль, в котором реализую этот интерфейс:

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

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

    return MyImplementation;
})();

У меня проблема в том, что реализация, по-видимому, не распознана: Не реализован снимок экрана с предупреждением

Но если я удалю назначение window.exports.MyImplementation или статус возврата, предупреждения больше не будет...

введите здесь описание изображения

.. но я хочу вернуть и сохранить свой тип из моего модуля!

Я что-то упускаю или делаю не так?...

Изменить:

Просто чтобы еще больше запутать мою проблему, я рассматривал возможность использования объявления интерфейса "полная аннотация" (если это возможно, я экспериментирую здесь...):

введите здесь описание изображения

... но в этом случае вы можете заметить, что символ «I» исчез с левой стороны, и если метод не реализован, у меня нет никакого предупреждения. НО распознается тип IInterface.

Редактировать: кажется, я кое-что понял, экспериментируя с другими элементами jsDoc. Предупреждение выдается, потому что проверка реализации выполняется в window.exports.MyImplementation. Но прямого присваивания, реализующего этот объект в коде, нет. И именно поэтому предупреждение отключается, когда я удаляю оператор возврата или назначение «exports.MyImplementation».

.. таким образом, не уверен, что это можно рассматривать как ошибку, это может быть шаблон, который я использовал для своего модуля, который не соответствует шаблону, ожидаемому WebStorm, а также, возможно, самим JSdoc..... Если кто-то кто имеет опыт работы с JSDoc и Webstorm, может подтвердить.....

Еще одно редактирование: (я думаю, это важный шаг в понимании JSDoc)

Аннотации были перемещены в целевое поле и... тадааа (обратите внимание на букву «I», которая все еще здесь указывает на то, что интерфейс действительно реализуется).

введите здесь описание изображения

Мое объяснение: В этом может быть логика.... но, честно говоря, я действительно не знаю, имеет ли она значение: поскольку задокументированное поле будет экспортировано в "exports.MyImplementation" в самом конец, и это очевидно, что аннотация здесь полезнее, чем в частном приложении. WebStorm обнаружил экспорт в "exports.MyImplementation", поэтому ждет документацию по нему...

Имеет ли это смысл?...

И еще одно редактирование (снова) Расследование, расследование.

Я нашел совершенно другое решение, которое позволяет документировать, завершать, проверять и не предупреждать, что мне кажется лучшим решением для экспорта модулей: введите здесь описание изображения


person Charles HETIER    schedule 13.11.2014    source источник
comment
Я думаю, потому что ваше объявление MyImplementation технически завершено в строке 66 без реализации всех необходимых функций интерфейса. Я предполагаю, что вам нужно интегрировать реализацию метода в объявление MyImplementation, а не добавлять его позже в прототип.   -  person kasoban    schedule 13.11.2014
comment
Спасибо за ваше предложение kasoban, но реализация в теле ничего не меняет. Более того, я очень хочу реализовать это с помощью прототипирования. В идеале, если бы существовало решение по изменению аннотаций, оно идеально подходило бы под нужды :-)   -  person Charles HETIER    schedule 13.11.2014
comment
Хм, насколько я понимаю документацию, ваш код должен быть в порядке, за исключением отсутствующих точек с запятой в конце строки 66 и строки 55. Может быть, это как-то смущает инспектора?   -  person kasoban    schedule 13.11.2014
comment
Еще раз спасибо, kasoban... однако, насколько я понимаю подъем в javascript, мне кажется, что в этих случаях не должно быть точек с запятой :-). В любом случае, добавление точки с запятой ничего не меняет :-(   -  person Charles HETIER    schedule 13.11.2014
comment
Да, там не обязательно ставить точки с запятой, но они и не мешают. Это была просто дикая догадка :)   -  person kasoban    schedule 13.11.2014
comment
Также довольно новичок в JS, но я заметил, что если вы добавите выше function MyImplementation(): /** @interface */ var IMyInterface = IInterface;, а затем измените на * @implements {IMyInterface}, предупреждение исчезнет. Я подозреваю, что это не то, что вы ищете, но, возможно, это даст подсказку — возможно, что-то связанное с масштабом?   -  person Jeff Ogata    schedule 13.11.2014
comment
Большое спасибо, это действительно хорошая подсказка. Мне действительно интересно, что здесь происходит: я также заметил, что в этом случае больше нет проверки реализации интерфейса. Мне интересно, могу ли я полностью полагаться на аннотацию с помощью webstorm. возможно, могли бы и не обработанные дела....   -  person Charles HETIER    schedule 13.11.2014


Ответы (1)


это ошибка в поддержке WebStorm JSDoc, проголосуйте за WEB-14202

person lena    schedule 13.11.2014
comment
Хорошо, это кажется действительно хорошим ответом: когда вы пытаетесь выполнить реализацию из модуля, но без префикса пространства имен, это работает, даже если целевой объект неверен ....... Спасибо за обновление системы отслеживания ошибок. - person Charles HETIER; 13.11.2014
comment
Согласно моим дальнейшим исследованиям, я все меньше и меньше убеждаюсь, что это может быть ошибка. - person Charles HETIER; 14.11.2014