Объединение объектов

Узнал об еще одном способе объединения объектов.
Хочется дать возможность передавать в функцию объект, у которого могут быть заданы не все свойства. Недостающие должны быть заполнены из дефолтного шаблона. Например:

let input = {
    a:1,
    c:3
}

let template = {
    a:11,
    b:22,
    c:33
}


Раньше я делал так:

let result1 = Object.assign(template, input);


Оказывается, можно проще:

let result2 = {...template, ...input}

Результат:

Object {
  a: 1,
  b: 22,
  c: 3
}

 

К сожалению, вложенные объекты просто перезаписываются, без объединения свойств.