web-dev-qa-db-fra.com

Comment combattre des tonnes de variables non résolues dans Webstorm?

J'ai une fonction qui prend une donnée du serveur:

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

Webstorm dit que someVar - est une variable non résolue. Que puis-je me débarrasser de tels avertissements?

Je vois plusieurs options:

  • Supprimer les avertissements dans les paramètres d'idé;
  • Ajouter un fichier source JSON avec des champs ( details );
  • Utilisez la syntaxe de type tableau: data['some_unres_var'];

De plus, Webstorm me propose de créer un espace de noms pour les "données" (ajoutez une annotation telle que /** @namespace data.some_unres_var*/), créez ce champ ou renommez-le.

102
Sergei Panfilov

Utilisez JSDoc:

/**
 * @param {{some_unres_var:string}} data
 */
function getData(data){
    console.log(data.some_unres_var);
}
93

JSDoc l'objet. Puis ses membres.

/**
 * @param data          Information about the object.
 * @param data.member   Information about the object's members.
 */
function getData(data){
    console.log(data.member);
}
  • @property pour les variables locales (non paramètres)
  • Testé dans PyCharm. @Nicholi confirme que cela fonctionne dans Webstorm.
  • Le {{ member:type }} _ syntaxe suggérée par Andreas peut être en conflit avec Django templates.
  • Merci à Jonny Buchanan réponse en citant le @ param wiki .

Pour documenter des tableaux d'objets , utilisez [] _ entre crochets comme JSDoc suggère :

/**
 * @param data
 * @param data.array_member[].foo
 */
42
Bob Stein

Toutes les autres réponses sont incorrectes pour le cas général. Que faire si vous n'obtenez pas data en paramètre? Vous n'avez pas JSDoc alors:

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 avertira que "result.entries" est une variable non résolue (champ).

La solution générale consiste à ajouter un @namespace déclaration:

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;
}
15
Dan Dascalescu

l'utilisation d'un fichier JS factice avec une expression de fonction anonyme renvoyant le littéral JSON, telle qu'écrite à l'adresse http://devnet.jetbrains.com/message/5366907 , peut constituer une solution. Je peux également suggérer de créer une fausse variable qui contiendra cette valeur json et d'utiliser cette variable comme valeur d'annotation @param pour permettre à WebStorm de connaître le type réel. Comme:

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

Voir aussi http://devnet.jetbrains.com/message/5504337#5504337

6
lena

Utilisation destructrice, Luke.

function getData(data){
    const {member} = data;
    console.log(member);
}
2
lazy.lizard