export interface Subject { notify: (subjectName: string) => Promise; attach: (observer: Observer) => void; } export interface Observer { update: (data: object, subjectName: string | null) => Promise; attach: (subject: Subject) => void; } /** * It may look like there is some confusion on the Observer pattern. * Actually I'm still thinking about who's gonna listen: * - each field for itself, or * - the form as a delegate */