Cómo implementar el tipo mapeado parcial profundo de TypeScript sin romper las propiedades de la matriz

¿Alguna idea de cómo podría aplicar el tipo mapeado parcial de TypeScript a una interfaz de forma recursiva, al mismo tiempo que no rompe ninguna tecla con tipos de retorno de matriz?

Los siguientes enfoques no han sido suficientes:

interface User {  
  emailAddress: string;  
  verification: {
    verified: boolean;
    verificationCode: string;
  }
  activeApps: string[];
}

type PartialUser = Partial<User>; // does not affect properties of verification  

type PartialUser2 = DeepPartial<User>; // breaks activeApps' array return type;

export type DeepPartial<T> = {
  [ P in keyof T ]?: DeepPartial<T[ P ]>;
}

¿Algunas ideas?

ACTUALIZACIÓN: Respuesta aceptada: una solución mejor y más general por ahora.

Había encontrado una solución temporal que implica la intersección de tipos y dos tipos mapeados de la siguiente manera. El inconveniente más notable es que debe proporcionar las anulaciones de propiedad para restaurar las claves manchadas, las que tienen tipos de retorno de matriz.

P.ej.

type PartialDeep<T> = {
  [ P in keyof T ]?: PartialDeep<T[ P ]>;
}
type PartialRestoreArrays<K> = {
  [ P in keyof K ]?: K[ P ];
}

export type DeepPartial<T, K> = PartialDeep<T> & PartialRestoreArrays<K>;

interface User {  
 emailAddress: string;  
 verification: {
   verified: boolean;
   verificationCode: string;
 }
 activeApps: string[];
}

export type AddDetailsPartialed = DeepPartial<User, {
 activeApps?: string[];
}>

Al igual que

Respuestas a la pregunta(2)

Su respuesta a la pregunta