我一直在使用Visual Studio的JavaScript Intellisense functionality已经有一段时间了,它对提供标准API的建议有多么满意,但是我发现我无法获得Visual Studio理解配置对象(即具有多个可选或必需属性的单个对象作为函数的参数)。如何在Visual Studio中记录JavaScript配置对象Intellisense
的official JSDoc syntax表明,如果一个参数,预计将有属性,您创建一个单独的@param
线每使用点符号:
/**
* @param {Object} config
* @param {String} config.name
* @param {Number} config.gold
*/
function do_it(config) { ... }
但是,Visual Studio不承认这一点 - 它呈现config
,config.name
和config.gold
作为三个独立的顶级参数。
更糟的是,该方法体中自动完成功能不承认任何参数,更不用说它们的类型:
出现的唯一的解决办法来,甚至接近Visual Studio将使用适当的文档(@constructor
和@property
标签)编写从不称谓的构造函数,这使得我写了很多死代码,并且违背了JavaScript的无类别心态(这是我的原因首先配置对象)。它甚至不让我写配置对象!
不仅如此,但我也知道Visual Studio不需要它。例如,当我写出一个对this library function的调用时,它能够收集参数对象需要的属性,称为id
,source
和target
,并且在为函数的参数创建对象文本时提供了这些名称 - 而如果没有参数,则会提供这些名称单行文件。据推测,它来自一个简单的事实,他们是使用:
诚然,方法不会抛出异常,如果这些属性不是对象上,并在类型不正确,但仍然。 编辑:我最近能够在我自己的代码中用对象字面参数复制效果 - 我用一个定义良好的对象调用了一个函数,当我在其他地方再次调用该函数时,它给了我Intellisense的建议。我的代码。但是我仍然没有在函数体内的类型信息或语义访问。
Visual Studio显然理解配置对象的概念,并且正在做一些逻辑来提供建议的属性。那算法是什么?我如何利用它而不会损坏我的代码?
文档部分不起作用 - 它不会显示为VS支持'@ typedef'。但是,我发现VS会使用虚构造器和typedef或第一次调用函数的参数来给出正确的类型。 – TheHansinator
这是真的,它没有记录,但它的工作原理,你会得到正确的参数属性和它们的类型。如上所述,根本不需要虚拟构造函数,只是为了记录可能在函数本身之前发生的'config'对象。至于对函数的第一次调用,那是假定函数调用正在被VS传递的东西(像那个对象文字一样)解析。我想解释为什么你可以看到一些库的智能感知,因为你已经在使用JSDoc我个人会采用第一种方法.. – cviejo
使用Visual Studio Community 2015版本14.0.23107.0进行测试,你使用的是什么版本? – cviejo