singleton.ts
typescript/patterns/singleton.ts
TypeScript
Generic Singleton pattern implementation with lazy initialization.
singleton.ts
/**
* @description Generic Singleton pattern implementation with lazy initialization.
* @tags pattern, design-pattern, singleton, oop
*/
export abstract class Singleton<T> {
private static instances = new Map<string, unknown>();
protected constructor() {}
static getInstance<T extends Singleton<T>>(
this: new () => T
): T {
const key = this.name;
if (!Singleton.instances.has(key)) {
Singleton.instances.set(key, new this());
}
return Singleton.instances.get(key) as T;
}
static resetInstance<T extends Singleton<T>>(
this: new () => T
): void {
Singleton.instances.delete(this.name);
}
}