electronでspread operatorは使えない

ちょっと語弊のあるタイトルです。

正確にはオブジェクトに対するスプレッド演算子が使えない模様。

const hoge = {
  a: 1,
  b: 2,
};

const fuga = {
  ...hoge,
  b: 999,
  c: 3,
};

console.log(fuga);  // -> { a: 1, b:999, c: 3} になることを期待

みたいに、 オブジェクトをマージするようなスプレッド演算子の使い方のことです。

このように書くと SyntaxError: Unexpected token ... で怒られる。

少し調べた結果、

stackoverflow.com

にあるように、Node.js の古いバージョンではオブジェクトに対するスプレッド演算子が未定義で使えないという事情らしい。

あれ、でも electron で使ってる Node.js ってそんなに古いの?と思って electron のリポジトリ

github.com

を見に行ってみたら、ルート直下にある .node-version 内で Node.js のバージョンが指定されてて、現在の安定バージョンである electron v1.8.3 では Node.js のバージョンは 8.2.1 らしいです。

先のstack overflow によると Node.js v8.3 以降でオブジェクトに対するスプレッド演算子に対応したらしいので、非常に惜しい感じですね。

Release electron v2.0.0-beta.1 · electron/electron · GitHub にあるように v2.0.0 beta1 では Node.js v8.9.3 になるらしいので、これが正式リリースされるのを待ちましょう。それか、babel でうまいことトランスパイルするかですね。

スプレッド演算子を最近覚えて意気揚々と使ってみようとしたら出鼻を挫かれ、いろいろ調べることになったのでまとめておきました。おとなしく Object.assign 使います。