Указание Eclipse / JSDT типа переменной Javascript - PullRequest
5 голосов
/ 03 июля 2011

Я пытаюсь использовать Eclipse для разработки Javascript на стороне сервера.

Используемый мной API имеет функцию doStuff(string, object) (имена изменены для защиты виновных), которая возвращает значение различных типов (подклассы одного типа) в зависимости от (значений) передаваемых им аргументов.

Я создал библиотеку Javascript для описания этой функции:

/**
  * function doStuff(s, o)
  * @memberOf Global
  * @param {String} s
  * @param {Object} o
  * @type ResultType
  * @returns {ResultType}
  */
doStuff = function(str, obj} {return new ResultType();}

Поскольку она может возвращать несколько типов,Я объявил это как возвращающий базовый тип.Однако это означает, что Eclipse не знает, какой он на самом деле, и поэтому я получаю позже ложные ошибки при попытке доступа к полям этого объекта.

Так что может быть FooResultType, BarResultType, каждый из которых является ResultTypes, но есть дополнительные поля / функции

Есть ли способ обойти это?Можно ли как-то аннотировать переменную, содержащую возвращаемое значение, чтобы Eclipse знал, какой это тип на самом деле?

Я пробовал (с фигурными скобками и без скобок вокруг FooResultType)

/**
  * @type FooResultType
  */
  v = doStuff("stringvalue", someObject);

, но это делаетбез разницы.

(Есть другие вопросы в этой области, но я думаю, что они не касаются этой проблемы)

1 Ответ

7 голосов
/ 06 июля 2011

(отвечая на мой вопрос)

Ниже работает. Кажется, что ключом является «var» - только объявив переменную, вы можете заставить JSDT распознать, что она имеет указанный тип. Я подозреваю, что JSDT может управлять только одним типом для каждой переменной, хотя, конечно, будучи Javascript, тип может меняться произвольно.

/**
  * @returns {FooResultType}
  */
  var v = doStuff("stringvalue", someObject);

Также кажется, что требуется @returns, а не @type, хотя трудно понять, что поддерживается JSDT и что не поддерживается - это недостаточно хорошо задокументировано и необходимы эксперименты. Небольшие изменения иногда приводят к неожиданным изменениям.

...