2

この関数をプロトタイプからタイプスクリプトのjqueryに移植しようとしています:

    onFailure: function(xhr) {
    // Get options
    var opts = this;

    // Show result
    var msgBox = opts.msgBox ? opts.msgBox : opts.client.options.msgBox;  
    if (msgBox && !opts.onFailure) {
        msgBox.showError('Communicatie fout.');
    }

    // Handle onFailure callback
    if (opts.onFailure) {
        opts.onFailure.bind(opts.client)(xhr);
    }
    else if (opts.options && opts.options.onFailure) {
        opts.options.onFailure.bind(opts.client)(xhr);
    }

    // Fire event
    opts.client.failureCb.fire('failure');
},

これは移植されたコードです:

        onFailure(xhr){
            // Get options
            var opts = this;

            // Show result
            var msgBox = opts.msgBox ? opts.msgBox : opts.client.options.msgBox;
            if (msgBox && !opts.onFailure) {
                msgBox.showError('Communicatie fout.');
            }

            // Handle onFailure callback
            if (opts.onFailure) {
                opts.onFailure(opts.client)(xhr);
            }
            else if (opts.options && opts.options.onFailure) {
                opts.options.onFailure.bind(opts.client)(xhr);
            }

            // Fire event
            opts.client.failureCb.fire('failure');
        }

ご覧のとおり、それほど違いはありません。ただし、問題は typescript コンパイラから発生します。

エラー TS2094: プロパティ 'bind' は型 'null' の値に存在しません

これをどのようにjqueryに正しく移植する必要がありますか?

ありがとう。

4

1 に答える 1

1

それが起こる唯一の理由は、あなたが書いたものに基づいて typescript が型を推測したからです:

var opts = {
    options:{
        onFailure: null
    }
} 

// The property 'bind' does not exist on value of type 'null'
opts.options.onFailure.bind(); 

変数を be に明示的に入力することで、この動作を上書きできますany

var opts:any = {
    options:{
        onFailure: null
    }
} 

// no more error
opts.options.onFailure.bind(); 

これでコンパイル エラーは解消されますが、このコンパイル エラーは、コード内の有効な論理エラーを指している可能性があると思われます。

于 2013-11-01T00:07:38.473 に答える