interface ClassInterface<T, Args extends unknown[]> { | |
new (...args: Args): T; | |
} | |
export default function makeSingleton<T, Args extends unknown[]>( | |
BaseClass: ClassInterface<T, Args>, | |
...args: Args | |
): () => T { | |
let singleton: T; | |
return function getInstance() { | |
if (!singleton) { | |
singleton = new BaseClass(...args); | |
} | |
return singleton; | |
}; | |
} |