TypeScript 中的错误处理

TypeScript 中的错误处理

本文解释了 TypeScript 中的错误处理。

YouTube Video

TypeScript 中的错误处理

TypeScript 中的错误处理本质上是通过 try...catch 结构完成的,就像在 JavaScript 中一样。在 TypeScript 中,可以通过类型推断更清晰地管理错误内容。这样可以实现更精确和更易读的错误处理。

try...catch 语法

错误处理的基本语法如下:。

 1try {
 2    // Code that may throw an error
 3    throw new Error("Something went wrong!");
 4} catch (error) {
 5    // Catch and handle the error
 6    console.error("Error:", error);
 7} finally {
 8    // Code that runs regardless of whether an error occurred
 9    console.log("Finally block executed.");
10}

类型安全的错误处理

在 TypeScript 中,catch 块中捕获的错误被视为 any 类型,但建议为更安全的错误处理指定适当的类型。例如,您可以定义并使用自定义错误类型,如下所示:。

 1class CustomError extends Error {
 2    constructor(message: string, public errorCode: number) {
 3        super(message);
 4        this.name = "CustomError";
 5    }
 6}
 7
 8try {
 9    throw new CustomError("Invalid operation", 400);
10} catch (error) {
11    if (error instanceof CustomError) {
12        console.error(`Error: ${error.message}, Code: ${error.errorCode}`);
13    } else {
14        console.error("Unknown error occurred");
15    }
16}

在此示例中,创建了一个名为 CustomError 的类,并抛出一个带有自定义属性(如 errorCode)的错误。在 catch 块中,使用 instanceof 确定错误的类型并执行适当的处理。

异步错误处理

在 TypeScript 中,使用异步函数时也可以用 try...catch 来处理错误。

 1async function fetchData() {
 2    try {
 3        const response = await fetch("https://api.example.com/data");
 4        if (!response.ok) {
 5            throw new Error(`HTTP error! status: ${response.status}`);
 6        }
 7        const data = await response.json();
 8        console.log(data);
 9    } catch (error) {
10        console.error("Failed to fetch data:", error);
11    }
12}
13
14fetchData();

在此示例中,使用 fetch 获取数据,并检查 response.ok,如果状态码不是 OK,则抛出错误。错误在 catch 块中捕获,并输出相应的日志。

总结

在 TypeScript 中,使用类型明确错误内容使错误处理更安全和更具可读性。在处理错误时,明确可能出现的错误类型并相应地进行处理是很重要的。

错误

TypeScript 中的 Error 类扩展了 JavaScript 中的 Error 类,是用于表示错误的基本对象。通过使用 Error 类,您可以创建一个包含错误消息的对象并执行错误处理。

Error 类的基础知识

Error 类的用法如下。

1const error = new Error("Something went wrong!");
2console.log(error.message); // "Something went wrong!"
3console.log(error.name);    // "Error"

属性

Error 类具有以下属性:。

  • message 表示错误信息的字符串。
  • name 错误的名称。默认情况下为 "Error",但可以通过创建自定义错误类来更改。
  • stack 用于调试的堆栈跟踪信息。一个字符串,用于指示发生错误时导致错误的代码。

自定义错误类

也可以扩展 Error 类并创建自己的错误类。在需要特定错误处理的情况下,这非常有用。例如,当您想处理不同类型的错误(如 HTTP 请求错误或数据库错误)时,这非常有效。

创建自定义错误的示例

 1class CustomError extends Error {
 2    constructor(message: string, public errorCode: number) {
 3        super(message); // Call the constructor of the parent class 'Error'
 4        this.name = "CustomError"; // Set the name of the error
 5    }
 6}
 7
 8const customError = new CustomError("Invalid operation", 400);
 9console.log(customError.message);   // "Invalid operation"
10console.log(customError.name);      // "CustomError"
11console.log(customError.errorCode); // 400
  • 通过创建 CustomError 类并添加诸如错误代码之类的信息,您可以管理更全面的错误信息。

Error 类的继承

在 TypeScript 中,通过扩展 Error 类创建自定义错误类时,有一些需要注意的事项。

  1. 调用 super() 在自定义错误类的构造函数中,必须调用 super() 以调用 Error 类的构造函数。这确保了 messagestack 属性被正确初始化。

  2. 添加属性 如果想在错误对象中添加额外信息,可以在类中定义新属性。例如,在上述 CustomError 中,添加了一个 errorCode 属性。

抛出和捕获错误

你可以通过使用 Error 类或自定义错误类抛出错误,然后捕获它们来处理错误。

 1function riskyOperation() {
 2    throw new Error("Something went wrong during the operation");
 3}
 4
 5try {
 6    riskyOperation();
 7} catch (error) {
 8    if (error instanceof Error) {
 9        console.error(error.message);  // "Something went wrong during the operation"
10        console.error(error.name);     // "Error"
11    }
12}

对于自定义错误,也可以使用 instanceof 来识别特定错误并适当处理它们。

 1class CustomError extends Error {
 2    constructor(message: string, public errorCode: number) {
 3        super(message);
 4        this.name = "CustomError";
 5    }
 6}
 7
 8try {
 9    throw new CustomError("Database connection failed", 500);
10} catch (error) {
11    if (error instanceof CustomError) {
12        console.error(`Error: ${error.message}, Code: ${error.errorCode}`);
13    }
14}

总结

TypeScript 中的 Error 类是执行标准错误处理的基础类。此外,通过扩展 Error 类创建自定义错误,可以实现基于错误类型和附加信息的灵活错误处理。

您可以在我们的YouTube频道上使用Visual Studio Code跟随上述文章进行学习。 请也查看我们的YouTube频道。

YouTube Video