Я очень новичок в 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", поэтому ждет документацию по нему...
Имеет ли это смысл?...
И еще одно редактирование (снова) Расследование, расследование.
Я нашел совершенно другое решение, которое позволяет документировать, завершать, проверять и не предупреждать, что мне кажется лучшим решением для экспорта модулей:
MyImplementation
технически завершено в строке 66 без реализации всех необходимых функций интерфейса. Я предполагаю, что вам нужно интегрировать реализацию метода в объявлениеMyImplementation
, а не добавлять его позже в прототип. - person kasoban   schedule 13.11.2014function MyImplementation()
:/** @interface */ var IMyInterface = IInterface;
, а затем измените на* @implements {IMyInterface}
, предупреждение исчезнет. Я подозреваю, что это не то, что вы ищете, но, возможно, это даст подсказку — возможно, что-то связанное с масштабом? - person Jeff Ogata   schedule 13.11.2014