import type { Reporter } from './Reporter'; export abstract class Collector, R extends Reporter> { static isCollector(obj: any): obj is Collector { return ( obj && typeof obj.init === 'function' && typeof obj.destroy === 'function' && typeof obj.settle === 'function' ); } protected reporter?: R = undefined; init(reporter: R) { this.reporter = reporter; } destroy() { this.reporter = undefined; } settle() {} }