Пусть Visual Studio 2010 JavaScript IntelliSense знает тип объекта
Скажем, у меня есть функция javascript ниже:
function (msg) {
var divForResult = document.getElementById("test");
if (typeof (msg) == "object")
{
divForResult.innerHTML = "Result: <b>" + msg.Message + "</b>";
}
else {
divForResult.innerHTML = "Result: <b>" + msg + "</b>";
}
}
Я знаю, что если переменная msg
является объектом, она является Исключением, поэтому я печатаю свойство Message. Если нет, msg
является строкой, и я печатаю эту переменную. Мой вопрос: как я могу позволить Visual Studio 2010 JavaScript IntelliSense "знать" тип объекта msg, так что я получу правильные свойства/функции для типа объекта в такой ситуации?
Ответы
Ответ 1
К сожалению, Visual Studio "псевдо-исполнение" JavaScript для обеспечения лучшей поддержки Intellisense по-прежнему недостаточно всеобъемлющим.
Например, я написал эту небольшую функцию:
var foo = function(obj) {
if (typeof obj === "string") {
// presumably Intellisense should know obj is a string
// in this compound statement but it doesn't.
// try "obj." here
}
if ((typeof obj === "object") && (obj.constructor === Date)) {
// presumably Intellisense should know obj is a Date
// in this compound statement but it doesn't.
// try "obj." here
}
};
И если вы попробуете VS2010, то не заметите, что в двух статьях я пытался ограничить тип переданного объекта и поэтому мог бы предложить лучшие предложения. Таким образом, кажется, что Intellisense довольно ограничен локальными переменными.
Ответ 2
На самом деле это не ограничивается локальными переменными. Вы можете помочь VS с помощью XML-комментариев следующим образом:
function foo(message) {
/// <param name="message" type="String"></param>
message. //ctr+space here
}
Это не совсем то, о чем вы просите, но он отлично работает, когда вы принимаете только аргумент одного типа.