import type { Subject } from 'rxjs'; export class Change { constructor(public previousValue: T, public currentValue: T) {} } export type Changes = T extends (infer I)[] ? Change[] | { [index: number]: Changes } : T extends object ? { [P in keyof T as T[P] extends Subject ? never : P]?: Changes; } : Change;