0Pricing
TypeScript Academy · レッスン

型付きErrorクラスと階層

判別可能な型を使って独自のErrorクラスを作成します。

「型付きErrorクラスと階層」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全4レッスンが含まれています。

ようこそ

TypeScriptのカスタムエラークラスを使用すると、エラーに型階層を持たせ、安全で構造化された処理を実現できます。

Errorの拡張

statusCodeを持つ基底のAppErrorクラスを作成します。
class AppError extends Error {
  constructor(public message: string, public statusCode = 500) {
    super(message);
    this.name = 'AppError';
  }
}

エラー階層

特定のエラー種別ごとに、型付きのサブクラスを作成します。
class NotFoundError extends AppError {
  constructor(resource: string) { super(`${resource} not found`, 404); }
}
class ValidationError extends AppError {
  constructor(public fields: string[]) { super('Validation failed', 400); }
}

instanceofの使用

catchブロックでinstanceofを使用して、エラーの型を絞り込みます。
try { doSomething(); }
catch (err) {
  if (err instanceof NotFoundError) res.status(404).json({ error: err.message });
  else if (err instanceof ValidationError) res.status(400).json({ fields: err.fields });
}

判別可能なエラーのユニオン

型付きのエラー処理には、判別可能なユニオンを使用します。
type AppError =
  | { kind: 'not_found'; resource: string }
  | { kind: 'unauthorized' }
  | { kind: 'validation'; fields: string[] };

エラーファクトリー関数

エラー種別ごとにファクトリー関数を作成します。
const errors = {
  notFound: (r: string) => new NotFoundError(r),
  unauthorized: () => new AppError('Unauthorized', 401),
};

エラーのシリアライズ

APIレスポンス用にエラーをシリアライズします。
function serializeError(err: AppError): Record<string, unknown> {
  return { error: err.message, code: err.statusCode, name: err.name };
}

this.nameの設定

ログでエラーを正しく識別できるよう、this.nameには必ずエラークラス名を設定します。
class MyError extends Error {
  readonly name = 'MyError' as const;
  constructor(msg: string) { super(msg); }
}

Expressでのエラー

Expressのエラーハンドラーで型付きのカスタムエラーを使用します。
app.use((err: unknown, req: Request, res: Response, next: NextFunction) => {
  if (err instanceof AppError) {
    res.status(err.statusCode).json({ error: err.message });
  } else {
    res.status(500).json({ error: 'Internal error' });
  }
});

エラーロギングパターン

可観測性を確保するため、エラーの型とメッセージを記録します。
function logError(err: unknown): void {
  if (err instanceof Error) console.error(`[${err.name}] ${err.message}`);
  else console.error('Unknown error:', err);
}

エラー型のテスト

関数が正しいエラー型をスローすることをテストします。
test('throws NotFoundError for missing user', async () => {
  await expect(getUser(999)).rejects.toThrow(NotFoundError);
});

クイックチェック

実行時にオブジェクトがクラスのインスタンスかどうかを確認するTypeScriptのキーワードは何ですか?

まとめ

型付きエラークラスと階層について、このトピックの主要な概念と、実際のTypeScriptプロジェクトでの適用方法を学びました。

よくある質問

「型付きErrorクラスと階層」レッスンは無料ですか?

はい。「型付きErrorクラスと階層」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全4レッスンが含まれています。

「型付きErrorクラスと階層」で何を学びますか?

判別可能な型を使って独自のErrorクラスを作成します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

TypeScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「型付きErrorクラスと階層」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このTypeScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 型付きErrorクラスと階層
  2. Resultパターン:OkとErr
  3. 捕捉したErrorのナローイング(unknownとError)
  4. 非同期TypeScriptコードのエラーハンドリング
← TypeScript Academyに戻る