это тоже сломается. т.е.,

идеи относительно того, как можно рекурсивно применять TypeScript Partial Mapped Type к интерфейсу, в то же время не ломая ключи с возвращаемыми массивами типами?

Следующие подходы не были достаточными:

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 ]>;
}

Есть идеи?

ОБНОВЛЕНИЕ: Принятый ответ - лучшее и более общее решение пока.

Найден временный обходной путь, который включает пересечение типов и два сопоставленных типа следующим образом. Наиболее заметным недостатком является то, что вы должны предоставить переопределения свойств для восстановления загрязненных ключей, которые имеют типы возвращаемых массивов.

Например.

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[];
}>

Вот так

Ответы на вопрос(0)

Ваш ответ на вопрос