Los tipos genéricos me están volviendo loco, necesito ayuda

por Maria Hernandez Castro··57 votos

Llevo dos dias intentando tipar esta funcion y no hay manera:

function merge<T, U>(obj1: T, obj2: U): T & U {
  return { ...obj1, ...obj2 }
}

El problema viene cuando intento usarla con tipos condicionados y keyof. TypeScript empieza a quejarse de cosas que no entiendo. ¿Alguien tiene un recurso bueno sobre genericos avanzados? El handbook oficial es util pero se queda corto en casos reales.