Удалите свойство с помощью деструктурирования, без жалоб eslint на неиспользуемые переменные

#javascript #typescript #eslint #destructuring #unused-variables

Вопрос:

Рассмотрим следующий код, в котором я создаю «копию» x с удаленным одним из свойств, используя деструктурирование:

 const x = { a: 1, b: 2, c: 3};
const { a, ...x2} = x;
console.log(x);
console.log(x2);
 

Если я сделаю это так, @typescript-eslint/no-unused-vars буду считать это ошибкой, которая a не используется.

Как я могу изменить код, чтобы исправить ошибку, явно не прося eslint игнорировать оскорбительную строку , предпочтительно по-прежнему используя синтаксис деструкции? Т. Е. Я действительно не хочу использовать delete , и я не хочу явно перечислять все другие свойства, такие как const x2 = {b: x.b, c: x.c } .

Есть ли причудливый синтаксис или странное правило eslint, чтобы взять мой торт и съесть его тоже?

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

1. Почему бы просто не добавить шаблон игнорирования в конфигурацию правил и не использовать его?

Ответ №1:

Существует недавно добавленная опция, названная ignoreRestSiblings для этого правила.

Вы можете установить значение true, чтобы игнорировать ваше дело:

 { "ignoreRestSiblings": true }
 

Ответ №2:

Я обычно удаляю некоторые реквизиты с помощью этого утилиты:

 const removeProperty = <Obj, Prop extends keyof Obj>(obj: Obj, prop: Prop) => {
  const { [prop]: _, ...rest } = obj;
  return rest
}
 

Пожалуйста, проверьте, подходит ли это для вашего случая.

Хитрость в том, что вы используете подчеркивание _ для неиспользуемых переменных.

Вы можете явно разрешить использование _ правил in eslint.

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

1. линтинг должен помочь сохранить код красивым, а не заставлять вас вводить особенности, чтобы танцевать вокруг плохо написанных правил. ignoreRestSiblings это гораздо лучший подход, потому что удаление свойств с помощью деструктурирования является кратким.

2. @Wyck, конечно, ты прав