Skip to content

Instantly share code, notes, and snippets.

@Evgenus
Created August 28, 2014 12:31
Show Gist options
  • Save Evgenus/4b6f5c0e5a12f2a6145f to your computer and use it in GitHub Desktop.
Save Evgenus/4b6f5c0e5a12f2a6145f to your computer and use it in GitHub Desktop.
Cross mixin references
class EventEmitter {
public fire(): void {
}
}
//-----------------------------------------------------------------
interface ICanFire {
fire(): void;
}
interface IModel {
do(): void;
}
class Model {
private _emitter: ICanFire;
constructor(emitter: ICanFire) {
this._emitter = emitter;
}
do() {
this._emitter.fire();
}
}
//-----------------------------------------------------------------
interface AppApi extends EventEmitter, IModel {
}
class App {
private _emitter: EventEmitter;
private _model: Model;
constructor() {
this._emitter = new EventEmitter();
this._model = new Model(this._emitter);
}
public getApi(): AppApi {
return {
fire: this._emitter.fire.bind(this._emitter),
do: this._model.do.bind(this._model),
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment