正确使用错误

时间:2014-05-21 17:53:59

标签: exception typescript

我正在将TypeScript用于一个相当大的项目,我想知道使用Error的标准是什么。例如,假设我在Java中处理了一个超出范围的索引:

throw new IndexOutOfBoundsException();

TypeScript中的等效语句是否为:

throw new Error("Index Out of Bounds");

我可以通过其他方式实现这一目标吗?什么是公认的标准?

4 个答案:

答案 0 :(得分:139)

Someone posted this link to the MDN in a comment, and I think it was very helpful。它非常彻底地描述了ErrorTypes等内容。

  

EvalError ---创建一个表示有关全局函数eval()的错误的实例。

     

InternalError ---创建一个实例,表示抛出JavaScript引擎中的内部错误时发生的错误。例如。   “过多的递归”。

     

RangeError ---创建一个实例,表示当数字变量或参数超出其有效范围时发生的错误   范围。

     

ReferenceError ---创建一个实例,表示在取消引用无效引用时发生的错误。

     

SyntaxError ---创建一个实例,表示在eval()中解析代码时出现的语法错误。

     

TypeError ---创建一个实例,表示当变量或参数不是有效类型时发生的错误。

     

URIError ---创建一个实例,表示在encodeURI()或decodeURI()传递无效参数时发生的错误。

答案 1 :(得分:54)

JavaScript中超出范围的约定是使用RangeError。要检查类型,请使用if / else + instanceof,从最通用的

开始
try {
    throw new RangeError();
}
catch (e){
    if(e instanceof RangeError){
        console.log('out of range');
    }
}

答案 2 :(得分:37)

通过Exception发出和显示消息的简单解决方案。

For Each rowDGV1 As DataGridViewRow In DataGridView1.Rows

    For Each rowDGV2 As DataGridViewRow In DataGridView2.Rows

        If (rowDGV1.Cells(0).Value = rowDGV2.Cells(0).Value) And 
           (rowDGV1.Cells(5).Value = rowDGV2.Cells(5).Value) And
           (rowDGV1.Cells(6).Value = rowDGV2.Cells(6).Value) Then _
            AddRow(rowDGV1.Cells(0).Value, _
                   rowDGV1.Cells(5).Value, _
                   rowDGV1.Cells(6).Value)

    Next

Next


Private Sub AddRow(ByVal strName as String, ByVal strOne as String, ByVal strTwo as String)
    'Add a row into the 3rd dgv with the values presuming you have already added columns in it (for name and difference)

    Dim strValue as String = Cdbl(strOne) - Cdbl(strTwo)
    dgv3.Rows.Add()
    dgv3.Item(dgcName, dgv3.RowCount - 1).Value = strName
    dgv3.Item(dgcDifference,dgv3.RowCount - 1) = strValue
    dgv3.Item(dgcDGV1Col5,dgv3.RowCount - 1) = strOne
    dgv3.Item(dgcDGV1Col6,dgv3.RowCount - 1) = strTwo
    dgv3.Item(dgcDGV2Col5,dgv3.RowCount - 1) = strOne
    dgv3.Item(dgcDGV2Col6,dgv3.RowCount - 1) = strOne

End Sub

答案 3 :(得分:8)

别忘了switch语句:

  • 确保使用default进行处理。
  • instanceof可以在超类上匹配。
  • ES6 constructor将在完全相同的类上匹配。
  • 更容易阅读。

function handleError() {
    try {
        throw new RangeError();
    }
    catch (e) {
        switch (e.constructor) {
            case Error:      return console.log('generic');
            case RangeError: return console.log('range');
            default:         return console.log('unknown');
        }
    }
}

handleError();