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']
(perojslint
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.
4 answers
Use JSDoc:
/**
* @param {{some_unres_var:string}} data
*/
function getData(data){
console.log(data.some_unres_var);
}
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
*/
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;
}
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
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