向Eclipse/JSDT指定Javascript变量的类型

The*_*aul 5 javascript eclipse type-inference jsdt eclipse-3.6

我正在尝试使用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();}
Run Code Online (Sandbox Code Playgroud)

因为它可以返回几种类型,我已经声明它返回基类型.但是,这意味着Eclipse不知道它实际是什么类型,因此在尝试访问该对象的字段时会出现后来的虚假错误.

所以可以有FooResultType,BarResultType,每个都是ResultTypes,但有其他字段/函数

有没有办法解决?我可以以某种方式注释包含返回值的变量,以便Eclipse知道它到底是什么类型的吗?

我试过(有和没有围绕FooResultType的大括号)

/**
  * @type FooResultType
  */
  v = doStuff("stringvalue", someObject);
Run Code Online (Sandbox Code Playgroud)

但这没什么区别.

(这方面还有其他问题,但我认为没有解决这个问题的问题)

The*_*aul 7

(回答我自己的问题)

以下确实有效.关键似乎是"var" - 只有通过声明变量才能让JSDT识别它具有指定的类型.我怀疑JSDT每个变量只能管理一种类型,尽管当然是Javascript类型可以随意改变.

/**
  * @returns {FooResultType}
  */
  var v = doStuff("stringvalue", someObject);
Run Code Online (Sandbox Code Playgroud)

它似乎也需要@returns而不是@type,尽管很难知道JSDT支持什么和不支持它 - 它没有很好的文档记录,需要进行实验.小的变化有时会出现意想不到的差异.