Розширені методи обробки помилок у TypeScript

Ефективна обробка помилок має вирішальне значення для створення надійних програм TypeScript. Окрім базових блоків try-catch, TypeScript надає кілька передових методів для ефективної обробки помилок і забезпечення надійності коду. У цій статті розглядаються деякі з цих розширених стратегій обробки помилок.

1. Спеціальні класи помилок

Створення настроюваних класів помилок дозволяє більш точно представляти різні типи помилок. Спеціальні помилки можуть містити додаткові властивості або методи, які можуть допомогти у виявленні та обробці конкретних проблем.

class CustomError extends Error {
  constructor(public message: string, public code: number) {
    super(message);
    this.name = 'CustomError';
  }
}

function throwError() {
  throw new CustomError('Something went wrong', 500);
}

try {
  throwError();
} catch (error) {
  if (error instanceof CustomError) {
    console.error(`Error: ${error.message}, Code: ${error.code}`);
  } else {
    console.error('Unexpected error:', error);
  }
}

У цьому прикладі CustomError розширює вбудований клас Error і додає властивість code для визначення коду помилки.

2. Обробка помилок в асинхронному коді

Асинхронний код часто вимагає спеціальної обробки помилок. Використання async і await разом із блоками try-catch може спростити обробку помилок в асинхронних операціях.

async function fetchData(url: string): Promise {
  try {
    const response = await fetch(url);
    if (!response.ok) {
      throw new CustomError('Failed to fetch data', response.status);
    }
    const data = await response.json();
    console.log(data);
  } catch (error) {
    if (error instanceof CustomError) {
      console.error(`Error: ${error.message}, Code: ${error.code}`);
    } else {
      console.error('Unexpected error:', error);
    }
  }
}

fetchData('https://api.example.com/data');

Цей приклад демонструє обробку помилок асинхронного виклику fetch за допомогою async, await і try-catch.

3. Межі помилок у React із TypeScript

Під час роботи з React і TypeScript межі помилок допомагають виявляти помилки в дереві компонентів і відображати резервний інтерфейс користувача. Реалізація меж помилок за допомогою TypeScript забезпечує безпеку типів і належну обробку помилок.

import React, { Component, ErrorInfo } from 'react';

interface Props {}

interface State {
  hasError: boolean;
}

class ErrorBoundary extends Component<Props, State> {
  constructor(props: Props) {
    super(props);
    this.state = { hasError: false };
  }

  static getDerivedStateFromError(): State {
    return { hasError: true };
  }

  componentDidCatch(error: Error, errorInfo: ErrorInfo): void {
    console.error('Error caught by boundary:', error, errorInfo);
  }

  render() {
    if (this.state.hasError) {
      return <h1>Something went wrong.</h1>
    }

    return this.props.children;
  }
}

export default ErrorBoundary;

У цьому прикладі React компонент ErrorBoundary виловлює помилки у своїх дочірніх компонентах і відображає резервний інтерфейс користувача, якщо помилка виникає.

4. Використання типів захисту типів помилок

Захисники типу допомагають звузити тип помилки в TypeScript. Це особливо корисно під час обробки помилок різних типів або з різних джерел.

function isCustomError(error: any): error is CustomError {
  return error instanceof CustomError;
}

try {
  throw new CustomError('Example error', 400);
} catch (error) {
  if (isCustomError(error)) {
    console.error(`CustomError: ${error.message}, Code: ${error.code}`);
  } else {
    console.error('Unknown error:', error);
  }
}

Функція isCustomError — це захист типу, який допомагає визначити, чи є виявлена ​​помилка екземпляром CustomError.

5. Централізована обробка помилок

Для великих програм централізована обробка помилок може спростити керування помилками та забезпечити узгодженість. Це можна зробити за допомогою проміжного програмного забезпечення в Express.js або глобальних обробників помилок в інших структурах.

import express, { Request, Response, NextFunction } from 'express';

const app = express();

app.use((err: any, req: Request, res: Response, next: NextFunction) => {
  console.error('Centralized Error:', err.message);
  res.status(500).send('Internal Server Error');
});

app.listen(3000, () => {
  console.log('Server running on port 3000');
});

Цей приклад демонструє централізований обробник помилок для програми Express.js. Він виявляє всі помилки та відповідає загальним повідомленням.

Висновок

Розширені методи обробки помилок у TypeScript підвищують надійність ваших програм, надаючи більше контролю над керуванням помилками. Спеціальні класи помилок, обробка асинхронних помилок, використання меж помилок у React, захист типів і централізована обробка помилок є важливими стратегіями ефективного керування помилками. Реалізація цих методів призведе до більш зручного та надійного коду.