具体的には IE と Android のため。
ではどうするのがよいか
- まずESLintで弾く
- 代替コードにする
- Babel通してるなら spread operator で
- jQuery 使ってるならそれで jQuery.extend() | jQuery API Documentation
- どちらでもないなら lodash を追加で(個別パッケージがよい) Lodash Documentation
根拠
- Babel は Object.assign をトランスパイルしない
- しかし古めのブラウザでは動かずエラーで死ぬ
- babel-polyfill という手もあるが、asset bundler が適切にセットされていないと polyfill 二重読み込みで死ぬ可能性が残る
- あとサイズがでかい
ESLint が面倒見てくれない時は気をつけるしかなかったが今は大丈夫。
Node.js ネイティブならバージョンに従ってください。
cf.
- prefer-object-spread - Rules - ESLint - Pluggable JavaScript linter
- ESLint v5.0.0 変更点まとめ - Qiita
- JavascriptでObjectをextend / assign / mergeする4つの方法 - Qiita
- babel-polyfillとbabel-runtimeの使い分けに迷ったので調べた - Qiita
- Babelの設定を見直すための逆引きガイド
- Babel7.x時代のpolyfillの設定方法とuseBuiltInsの仕組み
別解
Babel などのトランスパイル環境が整っているのなら babel-plugin-transform-object-assign を常に入れておく。
@babel/plugin-transform-object-assign · Babel
これが入っていると static な Object.assign() を spread operator に変換してくれるので、結果的に IE にも対応できるようになる。ただし、完璧ではない。