Это связано с тем, что синтаксис расширения в литералах объектов "копирует собственные перечисляемые свойства из предоставленного объекта в новый объект".
Ни одно из собственных свойств вашего объекта Error не является перечисляемым.
var error = new Error('error');
var props = Object.getOwnPropertyDescriptors(error);
console.log(props); // none of these are enumerable
Поэтому синтаксис распространения ничего не копирует. Если бы у него было перечисляемое значение, то он бы его скопировал:
var error = new Error('error');
error.foo = 'bar';
console.log({...error});
Каков ожидаемый результат?
Не могу поверить, что я не нахожу обман.. Если у кого-то есть, дайте мне знать.
Показания синтаксиса расширения: только для итерируемых объектов.
@Kaiido Возможно, вы помните meta.coderhelper.com/q/370046/1048572?
@Bergi, нет, я не запомнил конкретный вопрос, просто обнаружил, что очень маловероятно, что его еще не задавали (ну, на самом деле я уже видел один, но даже тогда не ответил, думая, что должен быть обманщиком, что у меня, вероятно, не было времени искать тогда).