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ă
