2016-08-15 42 views
1

当启用Type Coverage时,我收到警告,说明try-catch的catch部分中的错误为Flow不在流程中。如果我试图把catch(err: Error)我得到一个意外的令牌:try-catch错误“未被Flow覆盖”

try { 
// do something that fails and throws an Error 
} catch(err) { 
    console.error('Error: ', err.message, err.stack) 
} 

所以我的问题是,是否有可能键入检查呢?如果是这样,最好的解决方案是什么?

我使用的是FlowType 0.30.0。

+0

在你的例子中,它可能只是一个错字,但你使用'err'和'e',是否改变这一点有一点帮助? –

+0

不,我在设置catch(err:Error)时仍然出错,它仍然是**不被Flow **覆盖。 _have修正了typo_ – aparedes

+0

好的问题是抛出错误不被流程覆盖,因为这可能是一个非常大的任务:你调用的每个函数都可能会在你的catch中抛出错误和冒泡,但是你永远无法确定如果你捕获的错误实际上是一个错误对象...: - / –

回答

1

我猜你正在使用Nuclide并启用了类型覆盖功能。您可以点击状态栏中的百分比来启用/禁用它。

“未发现”消息严格来说不是流量错误。它只是告诉你Flow不知道某种东西的类型。在这种情况下,这是正确的。无法静态知道异常类型可能是什么。在JS中,你可以抛出任何类型,所以你实际上并不知道它甚至是一个错误实例。

然而,在这种情况下,它也是一个良性信息。就我个人而言,我认为100%的覆盖面不一定是一个好目标。有些情况下,有这样的代码是有意义的。