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 中的错误类型。