interface LazyField { initialized: boolean; init: (params: T) => void; } const Lazy: new () => T & LazyField = function (this: T & LazyField) { this.initialized = false; this.init = (params: T) => { for (const key in params) { (this as T)[key] = params[key]; } } } as any;