export interface MyDelayCallback { displayName?: string; (...param: Argument): void; } /** * remember arguments after run * run all later added function with memorized argument */ export class MemorizedOnceCallbackList { protected list: MyDelayCallback[] = []; count() { return this.list.length; } add(item: MyDelayCallback) { this.list.push(item); } run(...args: Argument) { this.add = (item) => { item(...args); }; for (const item of this.list) { item(...args); } } }