2015-09-10 85 views
0

我想了解如何使用快遞與Typescript。我用表達式創建了一個漂亮的默認快速項目。在這裏面,我覺得下面這個簡單的方法,我不明白,也不會編譯「爲打字稿」err ['status']是做什麼的?

app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

事實上的錯誤原子打字稿及TSC給我is at line 31, file /Volumes/MonsterHD/mydev/expressgen/app.tsProperty 'status' does not exist on type 'Error'.

從其他研究中,我看到,有效轉換爲打字稿,使其工作如下所示:

app.use((req, res, next) => { 
    var err = new Error('Not Found'); 
    err['status'] = 404; 
    next(err); 
}); 

我很困惑。我相信我正在尋找Node中的Error類。我沒有看到作爲錯誤屬性的狀態。然而在JS中它起作用。但是在TS中它不是。這是爲什麼,err.status = 404err['status'] = 404這幾行的含義是什麼?

+0

困惑...沒有一個是打字稿 - 它都是javascript,並且是一個快速404錯誤處理程序的示例。 '.status'不是錯誤的標準屬性,但在JavaScript中,您可以輕鬆追加任何您喜歡的屬性 - 在這種情況下,HTTP狀態代碼。 – brandonscript

+0

謝謝......這有幫助!但是當我通過ts運行最上面的代碼時,它提供了一個錯誤,因爲在類型定義中,沒有屬性稱爲「狀態」。那麼,下面的咒語(err ['status'])呢?在js中它是否意味着相同? – pitosalas

+1

聽起來像無論是驗證/編譯你的JavaScript不允許你添加任意的屬性到'Error'的實例。我的建議是......不要將任意屬性添加到'Error'實例。 –

回答

0

我沒有看到作爲錯誤屬性的狀態。然而在JS中它起作用。但是在TS中它不是。這是爲什麼,err.status = 404err['status'] = 404這幾行的含義是什麼?

基本上上的誤差的status屬性express釘,以提供其作爲HTTP響應代碼提供給用戶。

由於Error沒有這個默認 ...打字稿抱怨。但是你可以使用['error']黑客來取消這個明確的那我通過添加error屬性來濫用錯誤對象。

注意:從javascript的角度來看foo.barfoo['bar']完全相同。這只是JavaScript的工作原理。

+1

像往常一樣好回答:) – pitosalas