export function replaceObject<T extends object, U extends object | null>(target: T, source: U): U {
  // Clear out the target object, otherwise inspecting the final object will
  // look very confusing.
  for (let key in target) delete target[key]

  return Object.assign(target, source)
}