Typescript MVVM framework