Se poate moșteni o clasă singleton în TypeScript?


Trebuie să moștenesc o clasă singleton și să suprascriu metoda ei. Este posibil în TypeScript? Sau există vreo altă modalitate de a implementa acest tip de scenariu în TypeScript.

// Clasă părinte

export class SFSCommands {
    static instance: SFSCommands;
    protected constructor() {
        if (SFSCommands.instance) {
            return SFSCommands.instance;
        }

        setInterval(() => {
            this.initSfsCommands('sss');
        }, 2000);
    }

    static getInstance() {
        if (!SFSCommands.instance) {
            SFSCommands.instance = new SFSCommands();
        }
        return SFSCommands.instance;
    }

    initSfsCommands(e: any) {
        console.log('comming in service');
    }
}

//**** Clasă copil ***********

import { SFSCommands } from '../utility/sfscommands';

export abstract class GameModel extends SFSCommands {
    roomName: string;

    constructor() {
        super();
        console.log(this);
    }

    // called from child whien game component inisilized

    initSfsCommands(event: any) {
        console.log('game model');
    }

}

Apelez SFSCommands.getInstance() din fișierul meu app.component.ts

Răspuns #1

O clasă Angular injectabilă/service este un singleton.

@Injectable({providedIn: 'root'})
export class GlobalService {}

Va fi instanțiat atunci când îl injectați pentru prima dată într-un component.

constructor(private globalService: GlobalService){}

Răspuns #2

Nu este drăguț, dar este posibil

export class GameModel extends SFSCommands {
  static getInstance() {
    super.getInstance().initSfsCommands = (event: any) => {
      console.log('game model');
    }
    return GameModel.instance;
  }
}

și ar trebui să apelezi GameModel.getInstance() în loc de SFSCommands.getInstance()

Sper că acest lucru ajută