Ответ 1
Использовать JSDoc:
/**
* @param {{some_unres_var:string}} data
*/
function getData(data){
console.log(data.some_unres_var);
}
У меня есть функция, которая принимает данные с сервера:
function getData(data){
console.log(data.someVar);
}
Webstorm говорит, что someVar
- это неразрешенная переменная.
Что я могу избавиться от таких предупреждений?
Я вижу несколько вариантов:
data['some_unres_var']
;Также Webstorm предлагает мне создать пространство имен для "данных" (добавить аннотацию типа /** @namespace data.some_unres_var*/
), создать такое поле или переименовать его.
Использовать 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 members.
*/
function getData(data){
console.log(data.member);
}
@property
для локальных переменных (не параметров){{ member:type }}
, предложенный Андреасом, может конфликтовать с шаблонами Django.Чтобы задокументировать массивы объектов, используйте скобки []
, как рекомендует JSDoc suggests:
/**
* @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 будет предупреждать, что "result.entries" является неразрешенной переменной (поле).
Общее решение состоит в том, чтобы добавить объявление @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, и использовать эту переменную в качестве значения аннотации @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
Разрушительное использование, Люк.
function getData(data){
const {member} = data;
console.log(member);
}