2017-08-24 71 views
0

我有以下代碼:住宅「捆綁」的類型不存在「無效」

setInterval(this.CheckIfCameraIsAvailable(false).bind(this), 2 * 60 * 1000); 

private CheckIfCameraIsAvailable(forceCheck: boolean) { 

} 

我有以下錯誤:

Property 'bind' does not exist on type 'void'

錯誤將被當我刪除解決( (CheckIfCameraIsAvailable)函數的參數forceCheck:boolean),但我想傳遞一個參數給函數。

+1

你試圖調用該方法的結果結合,而不是方法,爲什麼不使用的AR行函數'setInterval(()=> this.CheckIfCameraIsAvailable(false),2 * 60 * 1000)'? – jonrsharpe

+0

當我從函數中刪除(forceCheck:boolean)參數時,爲什麼錯誤會被解決? – Ala

+0

因爲假設你在做'this.CheckIfCameraIsAvailable.bind(this)',沒有括號,所以*實際上綁定了方法*。如果你做了'this.CheckIfCameraIsAvailable()。bind(this)'你會遇到同樣的問題。您需要將不帶參數的可調用傳遞給'setInterval'。 – jonrsharpe

回答

1

在您的示例中,您意外地調用該函數,然後嘗試對結果使用.bind。正確的長手代碼將是如下(你傳遞false參數爲bind的一部分:

class Example { 
    CheckIfCameraIsAvailable(forceCheck: boolean) { 
    alert(forceCheck); 
    } 

    run() { 
    setInterval(this.CheckIfCameraIsAvailable.bind(this, false), 2000); 
    } 
} 

const example = new Example(); 
example.run(); 

速記的方式來保持詞彙範圍是使用箭頭功能:

class Example { 
    CheckIfCameraIsAvailable(forceCheck: boolean) { 
    alert(forceCheck); 
    } 

    run() { 
    setInterval(() => this.CheckIfCameraIsAvailable(false), 2000); 
    } 
} 

const example = new Example(); 
example.run(); 

這是引入這樣一箇中間變量相當於:

class Example { 
    CheckIfCameraIsAvailable(forceCheck: boolean) { 
    alert(forceCheck); 
    } 

    run() { 
    const _this = this; 
    setInterval(function() { _this.CheckIfCameraIsAvailable(false) }, 2000); 
    } 
} 

const example = new Example(); 
example.run(); 
相關問題