如何获得VSCode智能感知以识别Javascript中的多态函数?

时间:2019-07-12 19:14:46

标签: javascript jsdoc

我有一个函数,可以接受单个数字或数字数组,并返回单个结果或结果数组。我无法让VScode将正确的类型返回到用于智能感知的存储变量中。

我已经尝试通过JSDoc使用一些文档模式,如下所示:

/**
 * Some Description
 *
 * @constructor
 * @param {number} nums
 * @returns {number}
 *//**
 * Some other Description for array version!
 *
 * @constructor
 * @param {number[]} nums
 * @returns {number[]}
 */

我也尝试了以下方法,但无济于事:

/**
 * Some Description
 * @param {number|number[]} nums
 * @returns {number|number[]}
 */

这种方法说变量可以是或,实际上并不能给出确定的结果。

/**
 * Some Description
 *
 * @constructor
 * @param {number} nums
 * @returns {number}
 *//**
 * Some other Description for array version!
 *
 * @constructor
 * @param {number[]} nums
 * @returns {number[]}
 */
function addOne(nums) {
   if (Array.isArray(nums))
      return nums.map(n => n+1);
   else
      return nums + 1;
}

var a = addOne(1); // ::number -> Intellisense shows a is of type number CORRECT!

var b = addOne([ 1, 2 ]); // ::number -> Intellisense shows b as if it's of type number which is incorrect.  It should be ::number[] which would be correct.

基本上,上面示例中的var a;应该显示为::number类型,而var b;应该显示为::number[]类型

0 个答案:

没有答案