Как бороться с множеством неразрешенных переменных предупреждение в Webstorm
Ок, у меня есть функция, которая принимает данные из ajax:
function getData(data){
console.log(data.some_unres_var);
}
Webstorm говорит, что some_unres_var
- это неурегулированные переменной.
Я не знаю, что делать с большим количеством таких предупреждений.
Я вижу несколько вариантов:
- отключить предупреждения;
- добавить исходный файл json с полями (подробнее подробности);
- использовать массивы, как синтаксис:
data['some_unres_var']
(аjslint
предупредите меня, чтобы не делал это); - ???
также Webstorm предлагает мне создать пространство имен для "данных" (добавьте аннотацию, например /** @namespace data.some_unres_var*/
), создайте такое поле или переименуйте его.
4 ответа:
Использовать JSDoc:
/** * @param {{some_unres_var:string}} data */ function getData(data){ console.log(data.some_unres_var); }
JSDoc объект. Затем его члены.
/** * @param data Information about the object. * @param data.member Information about the object's members. */ function getData(data){ console.log(data.member); }
@property
для локальных переменных (без параметров)- испытано в PyCharm. @Николай подтверждает, что он работает в Webstorm.
- The
{{ member:type }}
синтаксис Андреас предложил может конфликтовать с шаблонами Django.- Спасибо Джонни Бьюкенену ответ со ссылкой на @param wiki.
в документе массив объектов используйте
[]
скобки как JSDoc предполагает:/** * @param data * @param data.array_member[].foo */
все остальные ответы неверны в общем случае. Что делать, если вы не получите
data
как параметр? Тогда у вас нет 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 предупредит, что " результат.записи " - это неразрешенная переменная (поле).
общее решение состоит в том, чтобы добавить
@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; }
использование фиктивного js-файла с анонимным выражением функции, возвращающим литерал json, как написано в http://devnet.jetbrains.com/message/5366907, может быть решение. Я также могу предложить создать поддельную переменную, которая будет содержать это значение json, и использовать этот var в качестве значения аннотации @param, чтобы WebStorm знал, что такое фактический тип. Например:
var jsontext = {"some_unres_var":"val"}; /** @param {jsontext} data function getData(data){ console.log(data.some_unres_var); }
Смотрите также http://devnet.jetbrains.com/message/5504337#5504337