淘汰赛打字稿扩展程序

Run*_*sen 4 knockout.js typescript

任何人都可以在打字稿中发布一个在淘汰赛中扩展可观察的例子吗?淘汰赛扩展程序:http : //knockoutjs.com/documentation/extenders.html

我从 3 月 6 日开始使用这个版本的 Knockout.d.ts。2013 https://github.com/borisyankov/DefinitelyTyped/tree/master/knockout

编辑:非常感谢!因此,要扩展您“只需要”添加接口 KnockoutExtenders,以便打字稿“允许”它。例子

interface KnockoutExtenders {
    logChange(target: any, option: string): KnockoutObservableAny;
}

ko.extenders.logChange = function (target, option) {
    target.subscribe(function (newValue) {
    console.log(option + ": " + newValue);
    });
return target;
};
Run Code Online (Sandbox Code Playgroud)

在视图模型中声明如下:

this.score = ko.observable(score).extend({ logChange: "score" });
Run Code Online (Sandbox Code Playgroud)

bas*_*rat 5

打字稿中的接口是开放式的,因此您可以在多个位置添加它们。

以数字为例。您需要将此成员应用于扩展程序以及您的可观察对象。这是示例:

interface KnockoutExtenders {
    numeric(target: any, precision: number): KnockoutObservableAny;
}
interface KnockoutObservableNumber {
    extend(data: any): KnockoutObservableNumber;
}
ko.extenders.numeric = function (target: KnockoutObservableNumber, digits) {
    var result = ko.computed({
        read: function () {
            var value = target();
            var toret: string = value.toString();
            if (toret.length < digits) {
                toret = "0" + toret;
            }
            else if (toret.length > digits) {
                toret = toret.substring(0, digits);
            }
            return toret;
        },
        write: target
    });

    result(target());
    return result;
};
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看完整示例:https : //github.com/basarat/ChessClock/blob/d82a565ac9720cce00c75f099fcf7003f496755a/ChessClock/ChessClock/www/main.ts