Подтвердить что ты не робот

Пусть 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, так что я получу правильные свойства/функции для типа объекта в такой ситуации?

4b9b3361

Ответ 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
}

Это не совсем то, о чем вы просите, но он отлично работает, когда вы принимаете только аргумент одного типа.