проверка деструктурирования объекта

#javascript #eslint #jsdoc #ecmascript-2020

#javascript #eslint #jsdoc #ecmascript-2020

Вопрос:

Давайте предположим, что у нас есть две функции

 /**
 * @typedef MyResponse
 * @property {Number} id - my awesome id
 * @property {Array<Number>} attributes - list of ids
 * */

/**
 * @return {Promise<MyResponse>}
 * */
function request0() {
  return Promise.resolve({id: 1, attributes: [1,2,3]});
}
 

и

 (async function () {
  const { foo } = await request0(); // but it doesn't return foo, it returns id and attributes
  console.log(foo);
})();
 

Можно ли как-то выделить такие ошибки? Я пытался найти что-нибудь на eslint, но безуспешно.

Спасибо

Комментарии:

1. Я не вижу здесь проблемы, вы уничтожаете значение из request0, которое является разрешенным обещанием, содержащим эти реквизиты

2. Это зависит от уровня поддержки JSDoc вашего редактора. Статическая проверка типов, такая как TypeScript, также поймала бы это.

3. @asafel запрос 0 возвращает идентификатор и атрибут, и это задокументировано в примечаниях jsdoc. он не возвращает свойство foo

4. @str да, что-то вроде машинописного текста, но с jsdoc. он может работать с доступом к свойству простого объекта, но он не работает в случае деструктурирования

5. marketplace.visualstudio.com /… — Есть плагин для VSCode, который будет выделять.

Ответ №1:

Вы могли бы просто добавить // @ts-check в начало файла без eslint.
Затем вы могли видеть, что у вас foo есть красная строка.
Но вам нужно добавить его в каждый файл таким образом.
Подробнее в разделе Проверка типов JavaScript с помощью vscode.

введите описание изображения здесь

Комментарии:

1. intelij idea также поддерживает такую проверку blog.jetbrains.com/webstorm/2019/09 /…