Cómo luchar contra un montón de variables sin resolver advertencia en Webstorm


Ok, tengo una función que toma datos de ajax:

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

Webstorm dice que some_unres_var - es variable sin resolver. No se que hacer con muchas advertencias.

Veo pocas opciones:

  • suprimir las advertencias;
  • añadir un archivo fuente json con campos (más detalles);
  • use una sintaxis similar a los arrays: data['some_unres_var'] (pero jslint advert me to didn't do this);
  • ???

También Webstorm me ofrece crear espacio de nombres para el "data" (agregue una anotación como /** @namespace data.some_unres_var*/), cree dicho campo o cámbielo de nombre.

Author: Sergei Panfilov, 2013-12-30

4 answers

Use 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-16 12:13:14

JSDoc el objeto. Luego sus miembros.

/**
 * @param data          Information about the object.
 * @param data.member   Information about the object's members.
 */
function getData(data){
    console.log(data.member);
}
  • @property para variables locales (no parámetros)
  • Probado en PyCharm. @ Nicholi confirma que funciona en Webstorm.
  • La sintaxis {{ member:type }} sugerida por Andreas puede entrar en conflicto con las plantillas de Django.
  • Gracias a la respuesta de Jonny Buchanan citando el @param wiki.

Para documentar matrices de objetos , use [] corchetes como JSDoc sugiere :

/**
 * @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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-18 15:03:40

Todas las demás respuestas son incorrectas para el caso general. ¿Qué pasa si no obtienes data como parámetro? Usted no tiene JSDoc entonces:

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 advertirá que " resultado.entradas " es una variable sin resolver (campo).

La solución general es añadir una declaración @namespace:

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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-21 05:29:43

Usando un archivo js ficticio con una expresión de función anónima que devuelve el literal json, como está escrito en http://devnet.jetbrains.com/message/5366907 , puede ser una solución. También puedo sugerir crear una variable falsa que contenga este valor json, y usar este var como un valor de anotación @param para que WebStorm sepa cuál es el tipo real. Como:

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

Véase también 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-30 10:10:40