2

我想在 Visual Studio 中为我在方法调用中使用的选项对象获得 Intellisense 支持。

在 Javascript 中使用包罗万象的选项对象来配置对函数的调用是很常见的——例如 jquery 的 Ajax 调用使用:

$.ajax(settings);

其中 settings 只是一个对象,例如:

$.ajax({
    url: '/blah',
    data: { stuff: 1 },
    method: 'POST',
    // etc
});

尽管它是一个隐式对象,但属性遵循特定的类。通常,当您有类似这样的东西对 Intellisense/描述代码很重要但对代码工作不重要时,您可以将它放在 -vsdoc.js 文件中。但是我如何让 Intellisense 为这个对象提供信息呢?

我以jquery-vsdoc.js为例,因为它是由 Microsoft 提供的,但无济于事。在一种情况下,他们只是将其键入为“对象”,而在另一种情况下,他们根本不记录它。

例如,我已经尝试过 - 在 fillTable.js 中:

function fillTable(options) {
    /// <param name="options" type="FillTableOptions">Options to fill table</param>

在 fillTable-vsdoc.js 中:

function FillTableOptions() {
    /// <field type="String">Id property</field>
    this.idProp = 'Id';

但是对于 Intellisense,我得到的只是类型是 FillTableOptions - 当我创建对象时,我在选择属性时没有得到 Intellisense 帮助。

那么,如何获得对此类对象属性的 Intellisense 支持?

4

1 回答 1

2

我不知道有什么方法可以在 TypeScript 之外获得对对象参数的真正Intellisense 支持……但是,您可以在某种程度上格式化参数文档节点。

例如,您可以在“类型”属性中输入您喜欢的任何文本,只要它是一个连续的文本块(不包含任何空格或中断字符)。

前任。1:自定义类型注解。

function where(collection, evaluator) {
    /// <summary>
    /// Equivalent to a WHERE clause.
    /// </summary>
    /// <param name="collection" type="array||object">Accepts an array or associative array (object).</param>
    /// <param name="evaluator" type="function(key,value,index)">Applied to each element of the @collection to determine which elements to return.</param>
    /// <returns type="array||object" />
}

前任。2:多行参数文档(&#10;是新行)。

function modal(options) {
    /// <summary>
    /// Displays a modal window.
    /// </summary>
    /// <param name="options" type="object||string">
    /// &#10;If a string is passed in, will be treated as @heading.
    /// &#10;
    /// &#10;* heading {string} The heading text.
    /// &#10;? content {string} The text content; overridden by @htmlContent.
    /// &#10;? htmlContent {string} Use when HTML content is desired; overrides @content.
    /// &#10;? settings {object} FancyBox.js settings.
    /// </param>
}

这不会像 TypeScript 那样为您提供真正的对象参数智能感知,但它可以让您更好地控制注释的样式,并有助于减少歧义。

于 2013-03-13T00:37:11.853 回答