我正在玩TypeScript,我有幾個functional mixins,Eventable
和Settable
,我想混入一個Model
類(假裝它像Backbone.js模型):上述TypeScript中的Mixins
function asSettable() {
this.get = function(key: string) {
return this[key];
};
this.set = function(key: string, value) {
this[key] = value;
return this;
};
}
function asEventable() {
this.on = function(name: string, callback) {
this._events = this._events || {};
this._events[name] = callback;
};
this.trigger = function(name: string) {
this._events[name].call(this);
}
}
class Model {
constructor (properties = {}) {
};
}
asSettable.call(Model.prototype);
asEventable.call(Model.prototype);
的代碼工作正常,但如果我試圖用的混合式方法,如(new Model()).set('foo', 'bar')
一個不會編譯。
我可以解決此通過
- 添加
interface
聲明的混入 - 宣佈在
Model
聲明
虛擬get
/set
/on
/trigger
方法有沒有乾淨的方式圍繞虛擬聲明?
可能相關的解決方案,在[微軟/打字稿#2919]來解決這個(https://github.com/Microsoft/TypeScript/issues/2919#issuecomment-173384825) – mucaho