I have found a test case describing falsy unions spread types, which seems to be odd to me.
Why does TypeScript accept spread types from unions with Object and falsy types, whereas does not from unions with Object and truthy types?
declare const obj_a: Object | ""
declare const obj_b: Object | string
const x = { ...obj_a } // Not Error?
const y = { ...obj_b } // Spread types may only be created from object types.(2698)