Традиційний шаблон singleton насправді використовується для подолання того факту, що весь код має бути в класі.
classSingleton {privatestatic instance:Singleton;privateconstructor() {// do something construct... }staticgetInstance() {if (!Singleton.instance) {Singleton.instance =newSingleton();// ... any one time initialization goes here ... }returnSingleton.instance; }someMethod() { }}let something =newSingleton() // Error: constructor of 'Singleton' is private.let instance =Singleton.getInstance() // do something with the instance...
Однак, якщо вам не потрібна відкладена ініціалізація, ви можете натомість просто використати namespace:
namespaceSingleton {// ... any one time initialization goes here ...exportfunctionsomeMethod() { }}// UsageSingleton.someMethod();
Попередження: Singleton — це лише дивовижна назва для global
Для більшості проектів namespace можна додатково замінити на module.
// someFile.ts// ... any one time initialization goes here ...exportfunctionsomeMethod() { }// Usageimport {someMethod} from"./someFile";