Visual Studio Javascript Intellisense - объект параметров

Я хотел бы получить поддержку Intellisense в Visual Studio для объектов параметров, которые я использую в своих вызовах методов.

Распространено настраивать вызов функции в Javascript с помощью объекта опций catch-all - например, вызов Aquax в jquery использует:

$.ajax(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 для свойств объекта, подобного этому?

1 ответ

Я не знаю ни одного способа получить истинную поддержку Intellisense для параметров объекта за пределами TypeScript... однако вы можете отформатировать узлы документации параметров в некоторой степени.

Например, вы можете ввести любой текст, который вам нравится, в атрибут type, если он представляет собой непрерывный блок текста (не содержит пробелов или пробельных символов).

Ex. 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" />
}

Ex. 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>
}

Это не даст вам истинного Intellisense для параметров объекта так, как это делает TypeScript, но даст вам больший контроль над стилем комментариев и поможет уменьшить неоднозначность.

Другие вопросы по тегам