type Constructor = new (...args: any[]) => T; export class Singleton { private static instances = new Map, Singleton>(); public static getInstance( this: Constructor ): T { let instance = Singleton.instances.get(this); if (!instance) { instance = new this(); Singleton.instances.set(this, instance); } return instance as T; } }