export type Mock = { [P in keyof T]: T[P] extends Function ? T[P] : T[P] | Mock; }; export type PartialMock = { [P in keyof T]?: T[P] extends Function ? T[P] : T[P] | PartialMock | Mock; };