Пусть Visual Studio 2010 JavaScript IntelliSense знает тип объекта - PullRequest
10 голосов
/ 18 декабря 2010

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

Ответы [ 2 ]

10 голосов
/ 20 января 2012

На самом деле это не ограничивается локальными переменными.Вы можете помочь VS, используя xml комментарии, такие как:

function foo(message) {
    /// <param name="message" type="String"></param>
    message. //ctr+space here
}

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

6 голосов
/ 26 января 2011

К сожалению, « псевдо-исполнение » в 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 довольно ограничен локальными переменными.

...