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: многострочная документация параметров (
это новая строка).
function modal(options) {
/// <summary>
/// Displays a modal window.
/// </summary>
/// <param name="options" type="object||string">
/// If a string is passed in, will be treated as @heading.
///
/// * heading {string} The heading text.
/// ? content {string} The text content; overridden by @htmlContent.
/// ? htmlContent {string} Use when HTML content is desired; overrides @content.
/// ? settings {object} FancyBox.js settings.
/// </param>
}
Это не даст вам истинного Intellisense для параметров объекта так, как это делает TypeScript, но даст вам больший контроль над стилем комментариев и поможет уменьшить неоднозначность.