Jak walczyć z dużą ilością nierozwiązanych zmiennych ostrzeżenie w Webstorm

Ok, mam funkcję, która pobiera dane z ajax:

function getData(data){
    console.log(data.some_unres_var);
}

Webstorm mówi, że some_unres_var - jest zmienną nierozwiązaną. Nie wiem, co zrobić z wieloma takimi ostrzeżeniami.

Widzę kilka opcji:

  • tłumić Ostrzeżenia;
  • Dodaj plik źródłowy json z polami (więcej szczegóły);
  • użyj składni podobnej do tablic: data['some_unres_var'] (ale jslint ostrzegaj mnie, żeby tego nie zrobił);
  • ???

Również Webstorm oferuje mi stworzenie przestrzeni nazw dla "data" (dodaj adnotację jak /** @namespace data.some_unres_var*/), Utwórz takie pole lub zmień jego nazwę.

Author: Sergei Panfilov, 2013-12-30

4 answers

Użyj JSDoc:

/**
 * @param {{some_unres_var:string}} data
 */
function getData(data){
    console.log(data.some_unres_var);
}
 84
Author: Andreas Berheim Brudin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-16 12:13:14

Jsdoc obiekt. Potem jego członkowie.

/**
 * @param data          Information about the object.
 * @param data.member   Information about the object's members.
 */
function getData(data){
    console.log(data.member);
}
  • @property dla zmiennych lokalnych (bez parametrów)
  • testowane w PyCharm. @Nicholi potwierdza, że działa w Webstorm.
  • składnia {{ member:type }} zasugerowana przez Andreasa może być w konflikcie z szablonami Django.
  • dzięki odpowiedzi Jonny ' ego Buchanana cytując @ param wiki.

Aby udokumentować tablice obiektów , użyj [] nawiasów jako jsdoc sugeruje :

/**
 * @param data
 * @param data.array_member[].foo
 */
 34
Author: Bob Stein,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-18 15:03:40

Wszystkie inne odpowiedzi są nieprawidłowe W ogólnym przypadku. Co jeśli nie otrzymasz data jako parametru? Nie masz wtedy JSDoc:

function niceApiCall(parameters) {
  const result = await ...  // HTTP call to the API here
  for (const e of result.entries) {
    .. // decorate each entry in the result
  }
  return result;
}

WebStorm ostrzega, że " wynik.entries " jest zmienną nierozwiązaną (polem).

Ogólnym rozwiązaniem jest dodanie @namespace deklaracji:

function niceApiCall(parameters) {
  /** @namespace result.entries **/
  const result = await ...  // HTTP call to the API here
  for (const e of result.entries) {
    .. // decorate each entry in the result
  }
  return result;
}
 8
Author: Dan Dascalescu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-21 05:29:43

Używanie atrapy pliku js z anonimowym wyrażeniem funkcji zwracającym literał json, tak jak napisano w http://devnet.jetbrains.com/message/5366907 , może być rozwiązaniem. Mogę również zasugerować stworzenie fałszywej zmiennej, która będzie zawierać tę wartość json i użyć tej zmiennej jako wartości adnotacji @ param, aby WebStorm wiedział, jaki jest rzeczywisty typ. Like:

var jsontext = {"some_unres_var":"val"};
/** @param {jsontext} data
function getData(data){
    console.log(data.some_unres_var);
}

Zobacz też http://devnet.jetbrains.com/message/5504337#5504337

 5
Author: lena,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-30 10:10:40