Modelo de visualização de base Typescript Knockout.js

Agora que comecei a usar o Typescript junto com o Knockout.js, descobri que ter um modelo base do qual todos os meus modelos de visão herdam é muito útil. os métodos e propriedades deste modelo de visualização contêm operações CRUD básicas que são comuns em aplicativos knockout. Um modelo de vista típico contém uma coleção de modelos que você precisa selecionar, remover, desmarcar, etc. O costructor aceita uma string “Model” que será o nome da classe do modelo que deve representar.

class BaseViewModel {

//properties
Model: string;
Selected: KnockoutObservableAny;
Collection: KnockoutObservableArray;

//methods
public New: () => void;
public Select: (model: any) => void;
public Deselect: () => void;
public Add: (model: any) => void;
public Remove: (model: any) => void;
public Clean: () => void;


constructor(model: string) {

//property definitions
this.Model = model;
this.Selected = ko.observable();
this.Collection = ko.observableArray();



//method definitions

this.Select = (model) => {
this.Selected(model);
}
this.Deselect = () => {
this.Selected(null);
}
this.Add = (model) => {
this.Collection.push(model);
}
this.Remove = (model) => {
this.Collection.remove(model);
}

this.New = () => {
var model = new window[this.Model]; this.Add(model);
}


this.Clean = () => {
this.Collection([]);
this.Selected(null);
};
}

}