Для чего объявляется статическое поле типа этого же класса?

Пока слабо знаком с TypeScript, но вот с таким ни в одном языке пока не приходилось встречаться, увидел данный код в бойлерплейте ASP.NET Core + React-Redux + TS. Объясните, пожалуйста, зачем нужно объявлять статическое поле того же типа, в описании которого оно и объявляется?

import { AxiosResponse } from 'axios';
import { BaseService } from './base.service';
import { IAuthUser, ICredentials } from '../store/auth/types';

/**
 * Auth API abstraction layer communication via Axios (typescript singleton pattern)
 */
class AuthService extends BaseService {
  private static _authService: AuthService; // вот эта строка
  private static _controllerName: string = 'Auth';

  private constructor(controllerName: string) {
    super(controllerName);
  }

  public static get Instance(): AuthService {
    return this._authService || (this._authService = new this(this._controllerName));
  }

  public async logoutAsync(): Promise<AxiosResponse> {
    return await this.$http.post('Logout');
  }

  public async loginAsync(credentials: ICredentials): Promise<IAuthUser> {
    const { data } = await this.$http.post<IAuthUser>('Login', credentials);
    return data;
  }
}

export const AuthApi = AuthService.Instance;

Ответы (1 шт):

Автор решения: Aziz Umarov

Кусочек отсюда

Одиночка (англ. Singleton) — порождающий шаблон проектирования, гарантирующий, что в однопоточном приложении будет единственный экземпляр некоторого класса, и предоставляющий глобальную точку доступа к этому экземпляру.

→ Ссылка