Посібник для початківців із обробки помилок TypeScript
Ефективна обробка помилок є надзвичайно важливою для будь-якої мови програмування, і TypeScript не є винятком. Належна обробка помилок допомагає створювати стійкі та надійні додатки шляхом ефективного керування неочікуваними умовами. Цей посібник охоплює основи обробки помилок у TypeScript і надає практичні приклади для початківців.
Розуміння помилок у TypeScript
Помилки в TypeScript, як і в JavaScript, виникають під час виконання або під час компіляції. TypeScript забезпечує безпеку типів, яка може виявити багато потенційних проблем під час компіляції, але помилки під час виконання все одно потребують належного керування.
Основна обробка помилок за допомогою try
і catch
У TypeScript ви обробляєте помилки виконання за допомогою блоків try
і catch
. Цей підхід дозволяє вам виконувати код, який може викликати помилку, і обробляти цю помилку, якщо вона виникає.
Приклад try
і catch
function divide(a: number, b: number): number {
try {
if (b === 0) {
throw new Error("Cannot divide by zero");
}
return a / b;
} catch (error) {
console.error(error.message);
return NaN; // Return NaN to indicate an error
}
}
console.log(divide(10, 2)); // Output: 5
console.log(divide(10, 0)); // Output: Cannot divide by zero
У цьому прикладі функція divide
намагається поділити два числа. Якщо дільник дорівнює нулю, виникає помилка, яка перехоплюється блоком catch
, який записує повідомлення про помилку.
Спеціальні типи помилок
TypeScript дозволяє визначати власні типи помилок для кращого представлення конкретних умов помилки. Спеціальні типи помилок допомагають класифікувати помилки та ефективніше їх опрацьовувати.
Створення спеціального типу помилки
class DivisionError extends Error {
constructor(message: string) {
super(message);
this.name = "DivisionError";
}
}
function divide(a: number, b: number): number {
try {
if (b === 0) {
throw new DivisionError("Cannot divide by zero");
}
return a / b;
} catch (error) {
if (error instanceof DivisionError) {
console.error(`Custom Error: ${error.message}`);
} else {
console.error("An unexpected error occurred");
}
return NaN; // Return NaN to indicate an error
}
}
console.log(divide(10, 2)); // Output: 5
console.log(divide(10, 0)); // Output: Custom Error: Cannot divide by zero
Тут ми визначаємо спеціальний клас помилок DivisionError
, який розширює вбудований клас Error
. Ми використовуємо цю спеціальну помилку у функції divide
, щоб забезпечити точнішу обробку помилок.
Введіть Guarding з instanceof
Захист типу instanceof
допомагає звузити тип об’єкта помилки в блоці catch
, дозволяючи вам по-різному обробляти різні типи помилок.
Приклад типу Guarding
function processInput(input: string | number) {
try {
if (typeof input === "string") {
console.log(input.toUpperCase());
} else {
throw new Error("Input must be a string");
}
} catch (error) {
if (error instanceof Error) {
console.error(`Error: ${error.message}`);
} else {
console.error("An unknown error occurred");
}
}
}
processInput("hello"); // Output: HELLO
processInput(42); // Output: Error: Input must be a string
Цей приклад демонструє захист типу в блоці catch
, щоб гарантувати, що об’єкт помилки є екземпляром Error
, що забезпечує точну обробку помилок.
Використання finally
для очищення
Блок finally
можна використовувати для виконання коду, який має виконуватися незалежно від того, сталася помилка чи ні. Це корисно для операцій очищення, таких як закриття файлів або звільнення ресурсів.
Приклад з finally
function readFile(filePath: string): string {
try {
// Simulate reading a file
if (filePath === "") {
throw new Error("File path cannot be empty");
}
return "File content";
} catch (error) {
console.error(`Error: ${error.message}`);
return "";
} finally {
console.log("Cleanup: Closing file");
}
}
console.log(readFile("path/to/file")); // Output: File content
console.log(readFile("")); // Output: Error: File path cannot be empty
// Cleanup: Closing file
У цьому прикладі блок finally
забезпечує реєстрацію повідомлення про очищення незалежно від того, чи сталася помилка.
Висновок
Ефективна обробка помилок має вирішальне значення для створення надійних програм TypeScript. Використовуючи try
і catch
, користувальницькі типи помилок, захист типів і finally
, ви можете ефективніше керувати помилками та забезпечити передбачувану поведінку вашої програми навіть у обличчя несподіваних умов.
За допомогою цих методів ви можете витончено обробляти помилки та покращити надійність коду TypeScript. Практикуйте ці концепції, щоб навчитися обробці помилок TypeScript і писати більш стійкі додатки.