javascriptであるオブジェクトから特定のプロパティを除いたオブジェクトが欲しい時にdeleteではなくSpread構文を使って取得し、その際のeslintのlintの対応をしたメモ
特定のプロパティだけを取り出す
Spread構文を使ってプロパティを取り出す。例としてコードを上げるとこんな感じ
const obj = {id: 'xxx', age: 17, name: 'AAAA'} // IDとそれ以外のプロパティに分ける const {id, ...other} = obj console.log(other)
これでidとそれ以外のage,nameを持つオブジェクトに分けることができ、プロジェクトで使ってるlint等に引っかからなければこれだけでOK
今関わっているプロジェクトの場合はeslintのno-unused-vars*1のlintに引っかかったため対応が必要だった
eslintの設定
方針としてno-unused-varsのルールをoffにすることはしたくなかったので、なんとか// eslint-disable-next-lineを使わずに例外的に回避したいと思い、eslintの該当のルールを見た所解決方法は2パターンありそう
ignoreRestSiblingsオプション
ignoreRestSiblingsというオプションをtrueにすることでSpread構文で変数宣言した時はno-unused-varsを回避できた
The ignoreRestSiblings option is a boolean (default: false). Using a Rest Property it is possible to "omit" properties from an object, but by default the sibling properties are marked as "unused". With this option enabled the rest property's siblings are ignored. no-unused-vars - Rules - ESLint - Pluggable JavaScript linter
varsIgnorePatternオプション
ただもう少し上の例のidを意図的に使わないということを表せないかなと思っていた所varsIgnorePatternオプションを使って先頭が_(アンダースコア)*2であれば未使用を無視するという設定にする
no-unused-vars: ["error", { "varsIgnorePattern": "^_" }]
上の例の該当箇所を書き換えると以下のようになりidは_にバインドされるので、結果例外として引っかからなくなる
const {id: _, ...other} = obj
まとめ
deleteを使うとオブジェクトに破壊的な変更をしてしまうので気持ち悪いなと思ってたのでSpread構文を使ってく
一応今のプロジェクトでは後者の変数にprefixをつけること方を導入したけど、まだignoreRestSiblingsの方にしておけばよかったとなってないので、もしなったらどういう時に思ったのかを含め追記します