Spread Operator(Object inside Object)

Yes, that now works properly. When comparing that with the spread address, the spread is easily seen in this case to be superior to using Object.assign.

Spread:

const user2 = {...user, address: { ...user.address, city: 'Quebec' }};

Object.assign:

const user2 = {
    ...user,
    address: Object.assign({}, user.address, {city: 'Quebec'})
};