Intersection<A, B, C, D>: (A & B & C & D) extends infer U
    ? {
        [P in keyof U]: U[P]
    }
    : never

Type Parameters