javascript - Como lidar com dezenas de avisos de variáveis não resolvidas no WebStorm?
Eu tenho uma função que recebe dados do servidor:
function getData(data){
console.log(data.someVar);
}
O WebStorm diz que someVar é uma variável não resolvida. Como posso me livrar desses avisos?
Vejo várias opções:
- Suprimir avisos nas configurações da IDE;
- Adicione um arquivo de origem JSON com campos (detalhes);
- Use a sintaxe semelhante a array:
data['some_unres_var'];
Além disso, o WebStorm está me oferecendo criar um namespace para o "data" (adicionar uma anotação como /** @namespace data.some_unres_var*/), criar esse campo ou renomeá-lo.
Resposta #1
Use JSDoc:
/**
* @param {{some_unres_var:string}} data
*/
function getData(data){
console.log(data.some_unres_var);
}
Resposta #2
Documente o objeto com JSDoc. Depois, seus membros.
/**
* @param data Information about the object.
* @param data.member Information about the object's members.
*/
function getData(data){
console.log(data.member);
}
@propertypara variáveis locais (não parâmetros).- Testado no PyCharm. @Nicholi confirma que funciona no WebStorm.
- A sintaxe
{{ member:type }}que Andreas sugeriu pode entrar em conflito com os templates do Django. - Obrigado à resposta de Jonny Buchanan citando a wiki @param.
Para documentar arrays de objetos, use colchetes [] como sugere o JSDoc:
/**
* @param data
* @param data.array_member[].foo
*/
Resposta #3
Todas as outras respostas estão incorretas para o caso geral. E se você não receber data como um parâmetro? Então você não tem 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;
}
O WebStorm alertará que "result.entries" é uma variável (campo) não resolvida.
A solução geral é adicionar uma declaração @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;
}
Resposta #4
Uso de destruição, Luke.
function getData(data){
const {member} = data;
console.log(member);
}
