2015-09-10 55 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