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 类创建自定义错误类时,有一些需要注意的事项。
-
调用
super()在自定义错误类的构造函数中,必须调用super()以调用Error类的构造函数。这确保了message和stack属性被正确初始化。 -
添加属性 如果想在错误对象中添加额外信息,可以在类中定义新属性。例如,在上述
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频道。