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
の方にしておけばよかったとなってないので、もしなったらどういう時に思ったのかを含め追記します