呀,在我的許多項目中,我使用的打字稿我KO的ViewModels的。 以下打字稿:
class MyViewModel {
MyObservable = ko.observable();
MyComputed = ko.computed(() => {
return this.MyObservable() * 2;
})
}
呈現以下有效視圖模型:
var MyViewModel = (function() {
function MyViewModel() {
var _this = this;
this.MyObservable = ko.observable();
this.MyComputed = ko.computed(function() {
return _this.MyObservable() * 2;
});
}
return MyViewModel;
})();
使用功能雖然時要小心;以下打字稿功能:
MyFunction() {
if (this.MyComputed() > 4) {
alert('Higher than 4');
}
}
將呈現:
MyViewModel.prototype.MyFunction = function() {
if (this.MyComputed() > 4) {
alert('Higher than 4');
}
};
這意味着你可能當你在你的例如(data-bind="click: MyFunction"
會失敗)結合直接使用此功能碰上範圍問題this
。
爲了防止這些問題的範圍,你應該在聲明你的ViewModels的功能lambas:
MyFunction =() => {
if (this.MyComputed() > 4) {
alert('Higher than 4');
}
}
呈現:
this.MyFunction = function() {
if (_this.MyComputed() > 4) {
alert('Higher than 4');
}
};
由於打字稿最終會被編譯爲JavaScript,爲什麼不呢?如果您正在尋找通過TypeScript公開的Knockout API,請參閱https://github.com/borisyankov/DefinitelyTyped/tree/master/knockout – haim770