TypeScript 中的错误处理


像 TypeScript 和 JavaScript 这样的函数式编程语言提供了一种使用try-catch块处理错误的方法。try块捕获错误,catch块处理错误。在本教程中,我们将学习如何在 TypeScript 中处理错误。

TypeScript 中主要有 7 种类型的错误。在这里,我们将逐一学习所有类型的错误。

  • 范围错误− 如果我们尝试访问超出范围的任何内容,TypeScript 将抛出范围错误。例如,访问数组索引以获取像 10^100 这样的大数值。

  • 引用错误− 如果我们尝试访问未声明的变量,TypeScript 将抛出引用错误。例如,在未声明字符串变量的情况下,对该变量应用 toLowerCase() 方法。

  • 语法错误− 如果我们使用错误的语法编写代码,TypeScript 将抛出语法错误。例如,10***10 是语法错误,因为 *** 在 TypeScript 中不代表任何运算符。

  • 类型错误− 由于变量类型不匹配而发生。例如,使用 TypeScript 中的 Math.ceil() 方法删除字符串变量的小数部分。

  • URI 错误− 它可能在 TypeScript 中编码或解码 URI 时发生。例如,传递无效参数给 decodeURI() 函数会返回 URI 错误。

  • Eval 错误− 这些错误在 TypeScript 中使用 eval() 函数时发生。我们可以使用 eval() 函数来评估表达式。

  • 内部错误− 这种错误在内部发生。例如,如果堆栈大小超出限制,可能会发生这种情况。

我们已经了解了不同类型的错误。现在,我们将学习如何使用 try、catch 和 finally 块来处理错误。

使用 try、catch 和 finally 块

第一个问题出现了——什么是 try、catch 和 finally 块?try 块可以包含有错误的代码。如果发生任何错误,它将抛出错误并停止从发生错误的行执行代码。

顾名思义,catch 块用于捕获和处理错误。我们可以根据不同的错误在 catch 块中编写处理错误的代码。一个 try 块可以有多个 catch 块。我们可以创建一个不同的 catch 块来处理不同类型的错误,例如语法错误和引用错误。

finally 块包含在程序终止之前始终需要执行的代码。例如,关闭数据库连接或关闭文件,我们在错误发生之前在 try 块中打开的文件。

语法

用户可以按照以下语法使用 try、catch 和 finally 块。

try {
   //  Code with error
} catch {
   // handle the error
} finally {
   // execute the code before the program termination
}

示例 1

在下面的示例中,我们演示了如何使用 try-catch 块来处理 TypeScript 中的错误。在 try 块中,我们通过创建错误的新实例来抛出错误。catch 块捕获并处理该错误,通过在屏幕上打印一些消息和错误来处理。此外,用户可以在输出中看到“try 块结束”消息未打印,因为它是在错误发生行之后的一行中编写的。

try {
   // This should generate syntax error.
   throw new SyntaxError("Error occured inside the syntax.");
   //   this code will not execute.
   console.log("End of the try block");
} catch (error) {
   // control will be at here, after throwing the error from try block.
   console.log("Inside the catch block.");
   console.log("The error is " + error);
}

编译后,它将生成以下 JavaScript 代码:

try {
   // This should generate syntax error.
   throw new SyntaxError("Error occured inside the syntax.");
   //   this code will not execute.
   console.log("End of the try block");
}
catch (error) {
   // control will be at here, after throwing the error from try block.
   console.log("Inside the catch block.");
   console.log("The error is " + error);
}

输出

以上代码将产生以下输出:

Inside the catch block.
The error is SyntaxError: Error occured inside the syntax.

示例 2

在下面的示例中,我们在 try 块中创建了函数。它接受两个参数。第一个参数可以是任何值;另一个应该是数字。此外,它始终返回数字或 ReferenceError 对象。

在 errofunc() 函数内部,我们检查如果两个参数都是数字,则返回数字的和;否则,返回错误。在输出中,我们可以看到第一个函数调用将正确执行,第二个函数调用将创建错误。

try {
   // Creating the function which returns an number or error
   function errorfunc(num1, num2: number): number | ReferenceError {
      // If both parameters of type number, then return addition. 
      // Otherwise throw reference error.
      if (typeof num1 == "number" && typeof num2 == "number") {
         console.log(num1 + num2);
      }
      //  Throwing the new instance of the reference error.
      throw new ReferenceError("Parameter/s are not type of numbers.");
   }
   //   This will throw an error.
   errorfunc("11", 12);
} catch (error) {
   console.log("Inside the catch block.");
   console.log("The error is " + error);
} finally {
   // This will execute always
   console.log(
      "Inside the finally block to execute the code before program termination."
   );
}

编译后,它将生成以下 JavaScript 代码:

try {
   // Creating the function which returns an number or error
   function errorfunc(num1, num2) {
      // If both parameters of type number, then return addition. 
      // Otherwise throw reference error.
      if (typeof num1 == "number" && typeof num2 == "number") {
         console.log(num1 + num2);
      }
      //  Throwing the new instance of the reference error.
      throw new ReferenceError("Parameter/s are not type of number.");
   }
   //   This will throw an error.
   errorfunc("11", 12);
}
catch (error) {
   console.log("Inside the catch block.");
   console.log("The error is " + error);
}
finally {
   // This will execute always
   console.log("Inside the finally block to execute the code before program termination.");
}

输出

以上代码将产生以下输出:

Inside the catch block.
The error is ReferenceError: Parameter/s are not type of number.
Inside the finally block to execute the code before program termination.

在本教程中,我们学习了如何处理错误。我们使用 try、catch 和 finally 块来处理错误。但是,在 TypeScript 中处理错误类似于在 JavaScript 中处理错误,但我们也必须关注 TypeScript 中的错误类型。

更新于: 2022-12-19

6K+ 次查看

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告