Ответ 1
Насколько я знаю, вы не можете сообщить IntelliSense, какие поля и методы относятся к общей переменной, если она используется как параметр.
Если переменная была массивом, вы можете определить ее следующим образом:
function funcWithArrayArg(arrayArg) {
/// <param name="arrayArg" type="Array" elementType="Number">An array of numbers</param>
}
В VS2012 вы можете также аннотировать объекты так же (вы можете аннотировать поля о функциях, используемых в качестве конструкторов объектов, как показано ниже, но документы ничего не говорят об анонимных объектах, подобных этому):
var args = {
/// <field type="Number">Product ID</field>
productID: int
};
Ни один из этих подходов действительно не делает то, что вы хотите, поскольку второй подход не даст вам intellisense аргумента функции, и вы все равно используете VS2010.
Я считаю, что лучше всего определить пользовательский объект, который будет использоваться как объект аргумента только для этой функции, ведь так вы будете делать это на других языках, если хотите создать пользовательский объект в качестве параметра с IntelliSense. Это может выглядеть примерно так:
function ProductPreviewArgs(productId, productName, updateDate, saveItems) {
/// <summary>Creates an object for use as the sole argument to the setProductAsPreviewed function</summary>
/// <param name="productId" type="Number" optional="false">The Product ID</param>
/// <param name="productName" type="String" optional="false">The Product Name</param>
/// <param name="updateDate" type="Date" optional="false">The date the product was last updated</param>
/// <param name="saveItems" type="Boolean" optional="false">Specifies whether or not to save the items</param>
/// <returns type="ProductPreviewArgs">An object intended for use as the sole argument to the setProductAsPreviewed function</returns>
/// <field name="productId" type="Number">The Product ID</field>
/// <field name="productName" type="String">The Product Name</field>
/// <field name="updateDate" type="Date">The date the product was last updated</field>
/// <field name="saveItems" type="Boolean">Specifies whether or not to save the items</field>
this.productId = productId;
this.productName = productName;
this.updateDate = updateDate;
this.saveItems = saveItems;
}
Вы получите intellisense для объекта (который покажет, что вы положили в элемент returns
):
setProductAsPreviewed(
Если вы затем решите создать новый объект, вы получите здесь IntelliSense (который покажет вам описания для каждого параметра один за другим при их добавлении):
setProductAsPreviewed(new ProductPreviewArgs(
Я не совсем уверен, будет ли атрибут type
в элементе returns
работать таким же образом, как это происходит в VS2012, и, как вы могли бы ожидать, до сих пор эти документы досадно относятся к этому вопросу; и у меня нет копии VS2010, чтобы проверить все это прямо сейчас.