Статический класс, доступный без создания его экземпляра в Typescript

#typescript

#typescript

Вопрос:

Итак, я пытаюсь создать класс (в TypeScript), который доступен напрямую, без необходимости создавать его новые экземпляры, потому что некоторые классы будут изменять переменные в этом классе, а другие классы должны ссылаться на измененные переменные.

Вот мой код:

 class Auth {
    isAuthenticated: boolean
    constructor(){
        this.isAuthenticated = false;
    }

login(){
    this.isAuthenticated= true;
}

logout(){
    this.isAuthenticated = false;
}

isLoggedIn(){
    return this.isAuthenticated;
}

}

export default new Auth();
  

если я удаляю new из export default new Auth() , я получаю сообщение об ошибке:

Значение типа ‘typeof Auth’ не вызывается. Вы имели в виду включить «новый»?ts(2348)

Как еще я могу обойти это?

например, я хочу следующий сценарий

Класс A:

 import Auth from './auth'

Auth.login()
  

и другой класс сделал бы это:

 import Auth from './auth'
if(Auth.isLoggedIn){
//do this...
}else
{console.log("not logged in");
  

Если я использую новые экземпляры, значение этого экземпляра всегда будет false .

Ответ №1:

Просто сделайте методы и переменные внутри класса общедоступными и статическими, тогда вам не нужно создавать его экземпляр.

Например

 export class Util
{
    public static randomFromTo(from: number, to: number): number
    {
        return Math.floor(Math.random() * (to - from   1)   from);
    }
}
  

Затем можно просто выполнить Util.randomFromTo(from, to)

Или используйте шаблон проектирования singleton

 class Singleton {
    public someMethod() { ... }
}

// Using
const x = Singleton.getInstance();
x.someMethod();