2013-10-31 132 views
1

我試圖端口從原型此功能的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'); 
     } 

正如你看到它的沒有太大的不同。然而,問題來自於打字稿編譯:

錯誤TS2094:該物業「綁定」不上鍵入「空」

如何來正確地移植到jQuery的價值存在嗎?

謝謝。

+1

你能舉一個完整的例子嗎?我無法將這個示例放入上下文中 - 如果我使用jQuery AJAX,我希望使用'.error(jqXHR jqXHR,String textStatus,String errorThrown)'來處理AJAX失敗。 – Fenton

回答

1

爲什麼這會發生的唯一原因是因爲打字稿已經推斷基於你寫什麼類型:

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

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

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

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

您可以通過顯式鍵入變量是any覆蓋此行爲

這將刪除編譯錯誤,但我懷疑這個編譯錯誤可能指向您的代碼中有效的邏輯錯誤。