Skip to content

错误处理

在TypeScript中,异常处理的方式与JavaScript一致。TypeScript基于JavaScript并添加了静态类型检查,但在异常处理方面并没有引入新的机制或语法。因此,可以使用try-catch语句来捕获和处理异常。
TypeScript中的异常处理与JavaScript相同,使用try-catch语句来捕获和处理异常。通过使用try块、catch块和可能的finally块,我们可以以结构化的方式处理可能抛出的异常,并在发生异常时采取适当的措施。
以下是在TypeScript中使用try-catch语句进行异常处理

ts
try {
  // 可能抛出异常的代码块
  // ...
  throw new Error("Something went wrong."); // 抛出一个自定义异常
} catch (error) {
  // 异常处理代码块
  console.log("An error occurred:", error.message);
}

在try块中,我们可以包含可能抛出异常的代码。如果在try块中发生任何异常,控制流将立即转到catch块。catch块中的参数(本例中的error)表示捕获到的异常对象。我们可以使用该参数来访问与异常相关的信息,例如异常的消息(error.message)。
如果try块中没有抛出异常,catch块将被跳过,程序将继续执行try-catch语句后面的代码。
此外,也可以使用finally块来执行无论是否发生异常都需要执行的清理代码。finally块中的代码在try-catch块中的代码执行完成后始终执行,无论是否捕获到异常。

ts
try {
  // 可能抛出异常的代码块
  // ...
} catch (error) {
  // 异常处理代码块
  console.log("An error occurred:", error.message);
} finally {
  // 清理代码块,始终执行
  console.log("Cleanup code here.");
}

异常处理小妙招

自定义异常类:在处理异常时,可以自定义异常类来表示特定类型的异常。通过创建自定义异常类,可以提供更多的异常信息,并捕获特定类型的异常。

ts
class CustomError extends Error {
  constructor(message: string) {
    super(message);
    this.name = "CustomError";
  }
}

try {
  throw new CustomError("This is a custom error.");
} catch (error) {
  if (error instanceof CustomError) {
    console.log("Custom error occurred:", error.message);
  } else {
    console.log("Unknown error occurred.");
  }
}

抛出具体类型的异常:可以根据实际情况和异常的类型,抛出具体类型的异常。这样可以使异常处理更具可读性,并在捕获异常时更方便地处理。

typescript
   function divide(a: number, b: number): number {
     if (b === 0) {
       throw new Error("Division by zero.");   
     }
     return a / b;
   }
   
   try {
     let result = divide(8, 0);
     console.log("Result:", result);
   } catch (error) {
     if (error instanceof Error && error.message === "Division by zero.") {
       console.log("Cannot divide by zero.");
     } else {
       console.log("Unknown error occurred.");
     }
   }

使用断言函数处理异常:可以使用断言函数来为特定的异常添加额外的条件或处理逻辑。通过在try块内使用断言函数,可以在异常抛出前进行预处理或检查。

ts
function assertPositiveNumber(value: number): asserts value is number {
  if (typeof value !== "number" || value <= 0) {
    throw new Error("The value must be a positive number.");
  }
}

try {
  let num: number = -5;
  assertPositiveNumber(num);
  console.log("Valid number:", num);
} catch (error) {
  console.log("Error occurred:", error.message);
}

处理异步函数的异常:在处理异步函数的异常时,可以使用try-catch包装async/await或Promise中的相关代码块。一般来说异步日志中,十分实用。 异常处理中,try-catch语句可以捕获异步函数中的异常,并在异常发生时执行相应的处理逻辑。

typescript
   async function fetchData() {
     try {
       let response = await fetch('https://example.com/data');
       let data = await response.json();
       console.log("Fetched data:", data);
     } catch (error) {
       console.log("Error occurred while fetching data:", error.message);
     }
   }
   
   fetchData();

仅用于培训和测试,通过使用本站代码内容随之而来的风险与本站无关。版权所有,未经授权请勿转载,保留一切权利。
ICP备案号:滇ICP备15009214号-13   公安网备:滇公网安备 53312302000061号