0Pricing
TypeScript Academy · レッスン

捕捉したErrorのナローイング(unknownとError)

unknown型として扱われる捕捉済みエラーを安全に処理します。

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

ようこそ

TypeScript 4.0以降、catchしたエラーの型はunknownです。これにより、エラーのプロパティを使用する前に明示的な絞り込みが必要になります。

TS 4.0での変更

TypeScript 4.0ではuseUnknownInCatchVariablesが導入されました。strictモードでは、catchしたエラーの型はunknownになります。
// err is now: unknown
try { doSomething(); }
catch (err) {
  // err.message; // Error — cannot access on unknown
}

instanceofによる絞り込み

instanceof Errorを使用すると、エラーのプロパティに安全にアクセスできます。
catch (err) {
  if (err instanceof Error) {
    console.error(err.message, err.stack);
  } else {
    console.error('Unknown error:', String(err));
  }
}

isError型ガード

エラーを絞り込むために、再利用可能な型ガードを作成します。
function isError(e: unknown): e is Error {
  return e instanceof Error;
}
catch (e) {
  if (isError(e)) console.error(e.message);
}

カスタムエラーの絞り込み

catchブロックでカスタムエラー型へ絞り込みます。
catch (err) {
  if (err instanceof NetworkError) { /* retry */ }
  else if (err instanceof AuthError) { /* redirect */ }
  else if (err instanceof Error) { /* generic */ }
  else throw err;
}

useUnknownInCatchVariables

このフラグ(TS 4.4以降ではstrictの一部)は、catchしたエラーの型をunknownにします。
{ "compilerOptions": { "useUnknownInCatchVariables": true } }

文字列エラー

Errorオブジェクトではなく文字列をスローするコードもあります。両方に対応します。
catch (err) {
  const message = err instanceof Error ? err.message : String(err);
  console.error(message);
}

型付きthrowヘルパー

常に型付きのErrorをスローするヘルパーを作成します。
function throwErr(msg: string, code = 500): never {
  const e: AppError = Object.assign(new Error(msg), { statusCode: code });
  throw e;
}

unknownエラーの再スロー

処理できないエラーは再スローします。
catch (err) {
  if (err instanceof KnownError) handle(err);
  else throw err; // propagate unknowns
}

Reactのエラーバウンダリー

Reactのエラーバウンダリーは、ライフサイクルメソッドから発生するunknownエラーを処理する必要があります。
componentDidCatch(error: unknown, info: ErrorInfo) {
  if (error instanceof Error) logError(error.message);
}

catchしたエラーのテスト

型付きアサーションを使ってエラーハンドリングをテストします。
test('catches errors', async () => {
  jest.spyOn(api, 'fetch').mockRejectedValue(new NetworkError());
  const result = await safeRun();
  expect(result.ok).toBe(false);
});

確認問題

TypeScript 4.4以降のstrictモードで、catchしたエラー`err`の型は何ですか?

まとめ

catchしたエラーの絞り込み(unknownとError):このトピックの重要な概念と、実際のTypeScriptプロジェクトでの適用方法を学びました。

よくある質問

「捕捉したErrorのナローイング(unknownとError)」レッスンは無料ですか?

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

「捕捉したErrorのナローイング(unknownとError)」で何を学びますか?

unknown型として扱われる捕捉済みエラーを安全に処理します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「捕捉したErrorのナローイング(unknownとError)」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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