ゆずめも

メモ的なブログです。主に勉強した事について書いてます。

javascriptのオブジェクトから特定のプロパティを取り出しつつeslintのlintを回避する

javascriptであるオブジェクトから特定のプロパティを除いたオブジェクトが欲しい時にdeleteではなくSpread構文を使って取得し、その際のeslintのlintの対応をしたメモ

developer.mozilla.org

特定のプロパティだけを取り出す

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

*1:未使用の変数を警告する

*2:正規表現の設定なのでなんでもいいですが例としてアンダースコアにしてます